2010-12-21 4 views
25

Angenommen, ich habe eine Datei main.cpp, die sin() Funktion verwendet, die in libmath definiert ist. Nehmen Sie außerdem an, dass sowohl libmath.a als auch libmath.so im selben Verzeichnis verfügbar sind. Jetzt, wenn ich den Befehl g++ -o main main.cpp -lmath ausstelle, ist das Standardverhalten von Linux, zur geleiteten Bibliothek zu verbinden libmath.so. Ich möchte wissen, gibt es eine Möglichkeit, das Programm zu zwingen, mit der statischen Bibliothek libmath.a verknüpfen, ohne die gemeinsame Bibliothek zu löschen oder zu verschieben?Wie kann ich die Verknüpfung mit einer statischen Bibliothek erzwingen, wenn eine gemeinsame Bibliothek mit demselben Namen vorhanden ist

+2

Mögliches Duplikat von [g ++ Linker: erzwingen statisch Linken, wenn statische Bibliothek vorhanden ist? ] (http://stackoverflow.com/questions/3698321/g-linker-force-static-linking-if-static-library-exists) –

Antwort

20

Sie müssen die -static dem Linker übergeben, aber nur für bestimmte Bibliotheken, die Sie möchten. zB:

g++ -o main main.cpp -Wl,-Bstatic -lmath -Wl,-Bdynamic 
+3

Ich denke, du meinst "-Bistatic" statt "-static". Schlechte Single-Character-Bearbeitungen sind nicht erlaubt ... –

+0

Sicher sollte es für gcc/binutils keine Rolle spielen, -static und -Bstatic sind Synonyme im GNU-Linker. – nos

4

Mit dieser Funktion:

g++ -o main main.cpp /path_to/libmath.a 
8

Wenn Ihr Linker unterstützt -l:<filename> Sie verwenden:

g++ -o main main.cpp -l:libmath.a 
Verwandte Themen