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.
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.
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).