g ++ Linker: Erzwinge statische Verknüpfung, wenn eine statische Bibliothek existiert?
Ich habe ein Programm, das links zu vielen Bibliotheken. g++
standardmäßig, lieber link auf freigegebene Bibliotheken, auch wenn die entsprechenden Archiv vorhanden ist.
Wie kann ich ändern Sie diese Einstellung zu bevorzugen statische Archive über dynamische Bibliotheken, wenn eine statische Archiv vorhanden ist?
Anmerkung, die ich verwendet -static
option, aber es versucht zu finden, statisches Archiv für alle Bibliotheken, die ist nicht das, was ich will.
InformationsquelleAutor der Frage kumar | 2010-09-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Link
zlib
undlibfoo
als statische, undlibbar
als dynamische .--as-needed
fallen alle nicht verwendeten dynamischen Bibliothek.InformationsquelleAutor der Antwort naideflan
Wenn Sie nur wollen, zu statisch link ein oder zwei Bibliotheken mit dem rest, einschließlich system-Bibliotheken, die dynamisch sind, ist es oft einfacher, einfach Referenz der statischen Bibliothek mit vollem Namen. I. e. anstatt
-l
und-L
man g++ zu lösen, eine Bibliothek aus was er findet, simpy fügen Sie den vollständigen Pfad zu der Bibliothek als input. Unter dem g++ - Befehl über einen link einemain.o
Anwendung Hauptprogramm statisch libz und libfoo und dynamische libbar und libglib etc. :``
g++ main.o /usr/lib/libz.ein /usr/lib/libfoo.a-lbar
Edit 3 Aug-17 :
Ich habe gerade stolperte über diese Antwort die geht mehr ins detail und bietet eine alternative Möglichkeit (
-l:
) bestimmen Sie die Bibliothek direkt.InformationsquelleAutor der Antwort stanthomas