故事背景
最近同事遇到一個比較奇怪的問題,直接開門見山吧,在動態庫中呼叫靜態庫直接報錯了recompile with -fPIC,查看cmake的寫法也沒有問題,而且也是第一次遇見這個問題,所以就開啟了我的好奇之路,
探索之路
- 說實話我不喜歡百度,因為千篇一律,你抄我的我抄你的,沒有任何參考價值,直接google吧,都是一些英文的決議檔案,基本上都能解決你遇到的問題,
Briefly, the error means that you can't use a static library to be linked w/ a dynamic one.這句話我就不翻譯了,- The solution was to compile everything with
-fPIC, and link shared objects with-shared.Add-fPICtoCFLAGSorCXXFLAGSfor make-based projects.這句也不翻譯了,我覺得還是看英文比較好理解,翻譯出來沒有那個感覺,
經驗心得
In a word
- 動態庫中不可以鏈接靜態庫
- 如果想在動態庫中鏈接靜態庫,需要加上
-fPIC重新編譯靜態庫,然后再在動態庫中鏈接就可以了, - 查看是不是添加了-fPIC的命令:
readelf -d xxx.so | grep TEXTREL - cmake中直接設定
set(CMAKE_CXX_FLAGS "-fPIC")
大家有興趣的可以自行了解下-fPIC的作用,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/536078.html
標籤:其他
上一篇:TreeUtils工具類一行代碼實作串列轉樹 實戰Java8 三級選單 三級分類 附視頻
下一篇:多組合少繼承
