1. 程式人生 > >/usr/local/ssl/lib/libssl.a: error adding symbols: Bad value

/usr/local/ssl/lib/libssl.a: error adding symbols: Bad value

無效 .tar.gz sym cnblogs 版本 fig 編譯 bad all

一、背景

編譯第三方庫A的時候提示依賴openssl庫。

二、編譯openssl庫

去官網下載最新版本的openssl-1.0.2l.tar.gz
tar -zxvf openssl-1.0.2l.tar.gz
cd openssl-1.0.2l

./config
make
make install

完成編譯,默認openssl的庫安裝在/usr/local/ssl目錄下。

三、引用openssl庫

第三方庫【A】編譯引用openssl的時候(make的時候),提示這個錯誤:

/usr/local/ssl/lib/libssl.a: error adding symbols: Bad value

四、基本原理

我們都知道在生成一個動態庫時需要指定-fPIC,這是創建動態庫所要求的,共享庫被加載是在內存中的位置是不固定的,是一個相對的位置。
那麽在生成靜態庫時通常不指定
-fPIC, 可是在64bit編譯使用靜態庫就會提示需要-fPIC重新編譯該庫。 由於openssl編譯靜態庫時,沒有使用-fPIC選項,使得編譯出來的靜態庫沒有重定位能力。
這樣在64bit機器上編譯出來的靜態庫如果不指定-fPIC選項幾乎全部不能使用。 因此需要重新加上-fPIC從新編譯openssl

五、重新編譯

./config -fPIC
make depend
make install

六、註意

刪除openssl-1.0.2l,重新解壓。
因為編譯過的環境裏執行【重新編譯】動作看起來無效。

七、測試

再make第三方庫【A】的時候,沒有報錯,編譯通過。

使用其他靜態庫遇到類似問題,此方法同樣適用。

/usr/local/ssl/lib/libssl.a: error adding symbols: Bad value