2012-06-07 62 views
1

我有一個靜態鏈接的應用程序(sample.a),我想用PIC啓用的第三方庫(third-party-lib.a)構建它。請注意,第三方庫不是共享庫。它是一個PIC啓用的靜態庫。如何使用PIC啓用靜態庫建立靜態鏈接的應用程序

任何人都可以請建議我該怎麼做?

我試着與第三方庫鏈接我的圖書館就像我們平時鏈接靜態庫,但它給了我一個錯誤:

/usr/lib/libc_nonshared.a(stack_chk_fail_local.oS):在功能__stack_chk_fail_local': (.text+0x10): undefined reference to __stack_chk_fail」

在此先感謝。

回答

0

我建議使用nm來嘗試找到所涉及的符號。好主意也將是檢查是否沒有任何#define你需要照顧或類似。就其本身而言,只要您使用-fPIC編譯程序的其餘部分,啓用PIC的靜態庫不應該更改任何鏈接。

總而言之,它在我看來不像是由PIC設置引起的。您是否有機會使用動態庫構建代碼,現在只能切換到靜態?這可能解釋了其中涉及的一些配置丟失。

+0

感謝您的快速響應。我們的代碼不是用-fPIC編譯的。只有我們嘗試構建的第三方庫是啓用了-fPIC,但它不是共享對象。它是一個啓用了-fPIC的靜態庫。您是否建議我們需要使用-fPIC編譯我們的代碼?這是唯一的方法嗎? – user1441520

+0

根據我的理解,你不需要用-fPIC重新編譯(因爲靜態庫不應該有地址設置),但我不確定鏈接器使用的實際機制。 –

+0

謝謝..請讓我知道,如果你有任何其他信息..任何人都知道這一點? – user1441520