2010-06-18 52 views
0

如何在使用gcc/make構建共享對象sharedobj.so時如何告訴鏈接器靜態鏈接libfoo.a。鏈接器選項在創建共享對象時靜態鏈接lib * .a文件

我試圖通過LDFLAG選項 LDFLAGS + = -W1 --whole - 歸檔-L /路徑/到/ libfoo的-lfoo

我還試圖通過LDFLAGS選項 LDFLAGS + = -W1,靜態-L /路徑/到/ libfoo的-lfoo

我還試圖通過LDFLAGS選項 LDFLAGS + = -W1,Bstatic -L /路徑/到/ libfoo的-lfoo

我有一個lso試圖通過LDFLAGS的選項 LDFLAGS + = -W1,靜態鏈接-L /路徑/到/ libfoo -lfoo

我已經通讀了很多鏈接,告訴我如何做到這一點,但目前還沒有工作。

+0

建立sharedobj.so的規則以及make運行時規則產生的輸出可能會有幫助 – 2010-06-18 12:44:35

回答

1

LDFLAGS只是auto(conf | crap)的一個特性,鏈接器從不看它。只要給在命令行的所有選項,如:

GCC obj1.o obj2.o ... -shared -o libfoo.so -L /路徑/到/ lib目錄-lbar

0

我不真的明白了,你想讓靜態庫成爲你共享的一部分嗎?

然後它應該工作,當你將它作爲一個依賴項添加 - 就像其他對象(.o)文件。

鏈接a.o B.O c.o staticlib.a到libsharedobj.so

+0

是的。這正是我想要做的。 – 2010-06-18 12:51:33

0

你可能會想到一個圖書館爲對象(.o)文件的歸檔(.a)。您可以以類似的方式在鏈接器步驟中使用它來訪問文件。

但是我不清楚,但是如果所有的檔案將被包含在共享對象庫(或exe)中或者只包含那些需要的部分 - 我的理解只是需要的,但我沒有使用* nix位。對於.so,這可能意味着它不會包含和導出.so本身未使用的任何內容。