動態庫鏈接靜態庫遇問題

問題

liba.so的編譯依賴libb.a,鏈接後正常編譯通過。運行加載liba.so的時候報找不到函數int c(int d ).

原因

原因現在講不清楚,只知道和鏈接,地址,程序執行過程有關。

解決

在編譯libb.a的時候加上 -fPIC 選項(編譯爲位置獨立(地址無關)的代碼)這篇博客寫的挺好的

其他

ldd -r liba.so | grep c 和 nm liba.so | grep c 這兩個指令可以查庫裏面符號的情況,liba.so不需要實際加載運行,用這兩個指令就能直接查看符號在庫中的狀態。換成libb.a也同樣有效。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章