1. 程式人生 > >在Linux動態庫Project中連結靜態庫時,遇到error adding symbols: Bad value的問題

在Linux動態庫Project中連結靜態庫時,遇到error adding symbols: Bad value的問題

現象:在生成某個動態庫比如SDS_Utility.so的時候,需要靜態連結某些庫,如libboost_log.a, 報上述錯誤。

原因:靜態庫想連結進動態庫,必須滿足一定的條件,靜態庫需要加-fPIC選項編譯,編譯成Position Independent Code(也就是可重定位的程式碼),否則就會報錯:error adding symbols: Bad value。

對這種靜態庫,有兩種處理方法:

(1)使用 -fPIC 選項重新編譯靜態庫。

(2)還有一種方式,就是在SDS_Utility.so中,不連結靜態庫。在使用SDS_Utility.so的bin(exe)程式中,連結該靜態庫。boost的靜態庫預設編譯,沒有加-fPIC選項,用該方法測試通過。

其他疑問:

(1)使用靜態連結開關-Wl,-Bstatic -Wl,-lboost_log -Wl,-Bdynamic,是否可以?

答案:不行。一樣報錯:error adding symbols: Bad value。因為該靜態庫的程式碼缺少PIC特性。