2010-12-21 70 views
25

假設我有一個文件main.cpp,它使用sin()函數,該函數在libmath中定義。另外假設我們在同一個目錄中都有libmath.a和libmath.so。現在,如果我發出命令g++ -o main main.cpp -lmath,Linux的默認行爲是鏈接到共享庫libmath.so。我想知道是否有辦法強制程序與靜態庫libmath.a鏈接而不刪除或移動共享庫?當存在同名的共享庫時,如何強制與靜態庫鏈接

+2

的可能的複製[G ++鏈接:強制靜態鏈接,如果靜態庫是否存在? ](http://stackoverflow.com/questions/3698321/g-linker-force-static-linking-if-static-library-exists) – 2016-04-05 13:08:48

回答

20

您需要將-static傳遞給鏈接器,但僅限於您需要的特定庫。例如:

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

我認爲你的意思是「-Bstatic」而不是「-static」。太糟糕的單字符編輯是不允許的... – 2011-08-31 07:13:53

4

使用此功能:

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

如果你的鏈接器支持-l:<filename>你可以使用:

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