如何解決 error adding symbols: Bad value 問題


//by sven

最近遇到一個關於動態庫和靜態庫使用的一個問題。


我們都知道在生成一個動態庫時需要指定-fPIC,這是創建動態庫所要求的,共享庫被加載是在內存中的位置是不固定的,是一個相對的位置。


那么在生成靜態庫時通常不指定-fPIC, 可是在64bit編譯使用靜態庫就會提示需要-fPIC從新編譯該庫:


/opt/mipsel-openwrt-linux-4.8.3/mipsel-4.8.4/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/bin/../lib/gcc/mipsel-openwrt-linux-uclibc/4.8.3/../../../../mipsel-openwrt-linux-uclibc/bin/ld: ../lib/libmad.a(stream.o): relocation R_MIPS_26 against `mad_bit_init' can not be used when making a shared object; recompile with -fPIC
../lib/libmad.a: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
make: *** [libavio.so] Error 1

原因就是由於libmad編譯靜態庫時,沒有使用-fPIC選項,使得編譯出來的靜態庫沒有重定位能力。這樣在64bit機器上編譯出來的靜態庫如果不指定-fPIC選項幾乎全部不能使用。
因此需要重新加上-fPIC從新編譯libmad

 

 

 

 

 

這樣就可以使用該靜態庫了,使用其他庫類似問題同樣適用。




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM