近來在寫Makefile時候遇到如下問題。
有庫liba.so libb.so libc.so 都在我的工程目錄下,比如 /home/wb/code/project/lib
liba.so依賴于libb.so 和 libc.so
個人的代碼中只用到了liba.so中的代碼,我的Makefile就強行指定了
-Wl,-rpath= /home/wb/code/project/lib -la
這樣編譯是沒有問題的,但是運行起來的時候會提示找不到 libb.so.....
用ldd 去看可執行檔案,也能看到 執行檔案 的lib串列中確實需要libb.so 和 libc.so, 但是后面的說明找不到庫檔案
我也使用了-Wl,-rpath= /home/wb/code/project/lib -lb -lc 去嘗試過
同時用 -L 指定了庫檔案位置 ,但還是上述的錯誤
有大神能解決一下嗎。
現在我只好把libb.so libc.so 拷貝到了 系統的目錄下進行后續開發。
uj5u.com熱心網友回復:
元件就是要跟著運行程式放著,想不找庫就生成靜態的直接連接到編譯結果里面吧uj5u.com熱心網友回復:
還是要用動態鏈接,但是希望運行程式找庫時優先找我指定的檔案目錄,而不是系統目錄,同時,也不希望更改LD_LIBRARY_PATH的值,因為想把這個專案做成一個可移動的,即使拷貝到了其他電腦上,直接編譯,運行就可以,不想再進行多余的配置。
uj5u.com熱心網友回復:
動態庫有時候挺難用的 突然間不為啥就找不到了。。。。
uj5u.com熱心網友回復:
動態庫的機制問題,在編譯時需要你指定動態庫的位置完成編譯,在程式執行時,要在系統庫目錄下查找動態庫,比如ubuntu下動態庫編譯后的路徑要加到/etc/ld.so.conf 檔案中,再用ldconfig命令(或重啟)使路徑生效uj5u.com熱心網友回復:
鏈接時指定rpath是不錯的方法,沒遇到過問題,樓主能不能確認一下是不是拼寫錯誤
-Wl,-rpath= /home/wb/code/project/lib
^ 檢查一下這里是不是有個空格?
uj5u.com熱心網友回復:
-Wl,-rpath= /home/wb/code/project/lib
^ 檢查一下這里是不是有個空格?
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/80368.html
標籤:Power Linux
