RiskUnit0001.o: relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
obj/Debug/src/RiskUnit0001/RiskUnit0001.o: could not read symbols: Bad value
為什么需要
解決辦法編譯器已經提示了:recompile with -fPIC
但是我們應該重新編譯誰帶上這個參數呢?經過我幾番折騰,發現如下情況:
1、編譯.o文件的時候,沒有加參數-fPIC,這問題個在gcc version 3.4.6版本沒有發生,可能那個編譯器默認都給加上吧。
2、當前程序中有用到某個靜態庫,那個靜態庫編譯.o文件的時候沒有加上-fPIC(靜態庫其實就是.o文件打包)。補充一點:我發現手寫Makefile時即使不加-fPIC也沒有這個問題,這一點很郁悶,這個只在用automake工具編譯出.a文件時才出現過。
知道原因了,解決辦法自然有了,保證你編譯.o文件的時候,都加上-fPIC,這樣你才能編譯出動態庫來。
引用
http://hi.baidu.com/duizhe_memory/item/c4ccbb0831a5998d3d42e212