/usr/local/ssl/lib/libssl.a: error adding symbols: Bad value
阿新 • • 發佈:2017-08-24
無效 .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