2013-02-06 238 views
1

我有一個基於C++的項目(許多源文件)使用gnu make通過makefile編譯。 我有一個鏈接庫的應用程序,說mylib。現在mylib由其他開發人員擁有。我看到存在於路徑2個文件,其中的二進制庫生成即 libmylib.so(共享對象)和libmylib.a添加(靜態庫歸檔文件)它會鏈接什麼庫 - 靜態或共享對象

我的應用程序生成文件下面有鏈接器選項鍊接庫MYLIB

LDFLAGS + = - 1:MYLIB ...

的問題是庫MYLIB的是什麼版本將在我的應用程序的可執行

鏈接將在共享對象libmylib.so或靜態版本libmylib.a添加?

如何決定,是否有任何其他makefile選項來管理?

+1

我認爲這取決於平臺/編譯器,但除非指定了「-static」,否則IIRC'gcc'默認爲動態。 – 2013-02-06 14:22:32

回答

4

默認情況下,在非嵌入式Linux上,您將獲得動態鏈接。如果你想改變它,你可以在LDFLAGS中指定它;

LDFLAGS+= -Wl,--Bstatic -lmylib -Wl,--Bdynamic 

(可能需要引號)這將只切換到靜態只有這個庫,然後回到默認的動態。

+0

謝謝。我會等待一天,看看在接受之前是否有其他答案。 – goldenmean

+0

只是查詢人ld提到它是-Bstatic(--Bdynamic)而不是--Bstatic( - Bdynamic)。它究竟是什麼? – goldenmean

+0

@goldenmean在Linux上,這兩個選項似乎都適用於此選項,但您說得對,文檔似乎贊成'-Bstatic'。 –