Wie funktioniert Shared-Libry Sharing für "Linux" -Systeme mit verschiedenen Toolchains?C++

Programme in C++. Entwicklerforum
Anonymous
 Wie funktioniert Shared-Libry Sharing für "Linux" -Systeme mit verschiedenen Toolchains?

Post by Anonymous »

Ich möchte verstehen, was genau bei Compile/Laufzeit passiert, wenn eine C ++ - ausführbare Datei versucht, unter Linux auszuführen. Ich weiß, dass dies etwas vage ist, also werde ich versuchen, in den folgenden Absätzen genauer zu sein, aber dies fasst in gewissem Sinne meine Frage zusammen ... < /p>

Wenn Sie eine C ++-ausführbare Datei mit Abhängigkeiten (Bibliotheken) kompilieren, werden entweder in statischer oder in Shared angegeben (ignoriert die Art von Header nur). Sie können diese dann entweder statisch oder dynamisch mit dem, was Sie bauen, verknüpfen. Dies scheint jedoch nur bis zu einem gewissen Grad korrekt zu sein, da es auch für die einfachsten Programme einige Abhängigkeiten gibt, z. libstdc ++. Also (was normalerweise zu einer bestimmten Art von Version in Ihrem System symliziert wird), glibc.so usw.
Das ist für mich sinnvoll. Da der C ++ - Code "irgendwo" ausführen muss, d. H. Main wird nicht nur auf magische Weise aufgerufen, so dass der Code, der Main tatsächlich aufruft (wahrscheinlich?). In ähnlicher Weise muss die C ++ - Standard -Implementierung irgendwo sein, d. H. Libstdc ++. Normalerweise wird Ihre Linux -Verteilung mit einer Version von GCC ausgestattet. Nennen wir es A , aber Sie können natürlich andere daneben installieren, sagen wir B . Natürlich bringt Version B seine Version von libc.so.b , libstdc ++. So.b , libgcc_s.so usw.
Jetzt erstelle ich eine ausführbare Datei mit GCC-B , nenne es b.out . Ausführen von LDD wird angezeigt (vorausgesetzt, ich habe nichts anderes angegeben), dass dieser b.out libc.so.b , libstdc ++ benötigt. So.b usw. Wenn ich b.out nehme und dies in ein System mit nur Toolchain A verschiebe, sollte ich es meiner Meinung nach nicht ausführen können, da ich vermisse *.so.b .
Aber es scheint, dass ich manchmal in der Lage und manchmal nicht kann. dass die Antwort irgendwo in der Beziehung zu (g) ​​libc.so und libstdc ++ liegt.

Code: Select all

-static
, -fpie , -static -pie usw.), aber es fällt mir sehr schwer, diese Dinge auseinander zu nehmen und die richtigen Verbindungen herzustellen.

Ich suche nach einer Referenzanfrage, da ich sicher bin, dass ich nicht die erste Person bin, die jemals darüber fällt. Natürlich, wenn jemand bereit ist, hier direkt zu antworten, als ich mehr als bereit bin zu lesen kann darüber lesen.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post