2016-09-01 63 views
0

我正在編譯一個qt5 c + +項目與gnu49編譯鏈接時與少數其他dylibs(犰狳,增強庫等。 )在Mac OSX El Captitan用C++ 11標誌和通常的qt框架標誌。這個項目編譯得很好,但爲了讓它在幾個其他機器上更加便於攜帶,我試圖靜態鏈接幾個動態庫。 我在靜態鏈接庫之前添加了靜態標誌(如-static -lboost_thread),如下所述。靜態鏈接與dylib ld:庫找不到-lcrt0.o collect2:錯誤:ld返回1退出狀態

https://gcc.gnu.org/ml/gcc/2000-05/msg00517.html

不過,我得到了下面的錯誤。

ld: library not found for -lcrt0.o collect2: error: ld returned 1 exit status

我證實,只有在嘗試靜態鏈接而不是動態鏈接時出現錯誤。

回答

1

GCC's -static option,您正在申請,是非位置。它強制執行所有庫的靜態鏈接 。您的聯繫失敗,則是因爲你的系統有libcrt0.o

沒有靜態版本,則可能會產生混淆GCC的static選項與ld's -static option(同義詞:-Bstatic-dn-non_shared), 這位置。它僅在命令行上影響後續的庫。它是 鏈接器的-Bdynamic選項(同義詞:-dy-call_shared)的倒數。

所以僅鏈接庫-lfoo-lbar ...靜態,通過GCC,你可以通過-Bstatic通過對 連接你提到他們-Bdynamic剛過他們之前:

-Wl,-Bstatic -lfoo -lbar -Wl,-Bdynamic 

不要忽略最後的-Wl,-Bdynamic,即使-lbar是您的最後一個庫,因爲GCC悄悄地將標準庫 附加到您的鏈接(如您所找到的)。

+0

感謝您的深思熟慮 – Pal

相關問題