wake-up-neo.com

Fordert gcc direkt auf, eine Bibliothek statisch zu verknüpfen

Es kommt mir seltsam vor, -Wl,-Bstatic Zu verwenden, um gcc mit welchen Bibliotheken ich statisch verknüpfen möchte. Schließlich erzähle ich gcc direkt alle anderen Informationen über das Verknüpfen mit Bibliotheken (-Ldir, -llibname).

Kann man dem gcc-Treiber direkt mitteilen, welche Bibliotheken statisch verknüpft werden sollen?

Klarstellung: Ich weiß, dass eine bestimmte Bibliothek, die nur in statischen Versionen existiert, ohne -Wl,-Bstatic Verwendet wird, aber ich möchte implizieren, dass gcc die statische Bibliothek bevorzugt . Ich weiß auch, dass das Angeben der Bibliotheksdatei direkt damit verknüpft wäre, aber ich bevorzuge es, die Semantik für das Einschließen von statischen und dynamischen Bibliotheken gleich zu halten.

107

Es ist natürlich möglich, -l: anstatt -l. Beispielsweise -l:libXYZ.a zum verlinken mit libXYZ.a. Beachten Sie das ausgeschriebene lib im Gegensatz zu -lXYZ, das sich automatisch zu libXYZ erweitert.

153
Radek

Sie können im Verknüpfungsbefehl eine .a-Datei hinzufügen:

  gcc yourfiles /path/to/library/libLIBRARY.a

Dies spricht aber nicht mit dem gcc-Treiber, sondern mit dem Linker ld als Optionen wie -Wl,anything sind.

Wenn Sie gcc oder ld "-Ldir -lLIBRARY" mitteilen, überprüft der Linker sowohl statische als auch dynamische Versionen der Bibliothek (Sie können einen Prozess mit -Wl,--verbose). Um die Reihenfolge der überprüften Bibliothekstypen zu ändern, können Sie -Wl,-Bstatic und -Wl,-Bdynamic. Hier ist eine Manpage von gnu LD: http://linux.die.net/man/1/ld

Verwenden Sie folgenden gcc-Aufruf, um Ihr Programm dynamisch und statisch mit lib1, lib3 und lib2 zu verknüpfen:

gcc program.o -llib1 -Wl,-Bstatic -llib2 -Wl,-Bdynamic -llib3

vorausgesetzt, die Standardeinstellung von ld ist die Verwendung dynamischer Bibliotheken (unter Linux).

115
osgx