問題
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也同樣有效。