GCC的-wl,-rpath=參數


使用GCC編譯動態鏈接庫的項目時,在其他目錄下執行很可以出現找不到動態鏈接庫的問題。

這種情況多發生在動態鏈接庫是自己開發的情況下,原因就是程序運行時找不到去何處加載動態鏈接庫。

可能會說在編譯時指定了鏈接的目錄啊!編譯時指定的 -L的目錄,只是在程序鏈接成可執行文件時使用的。程序執行時動態鏈接庫加載不到動態鏈接庫。


解決辦法有兩種,第一程序鏈接時指定鏈接庫的位置,就是使用-wl,-rpath=<link_path>參數,<link_path>就是鏈接庫的路徑。如:

gcc -o foo foo.c -L. -lfoo -Wl,-rpath=./

上面就是指定了鏈接的位置在當前目錄,這種情況只有在當前目錄執行./foo時,才是可以正確使用的。一般情況我們使用如下格式:

gcc -o foo foo.c -L$(prefix)/lib -lfoo -Wl,-rpath=$(prefix)/lib


第二種方式就是,將鏈接庫的目錄添加到/etc/ld.so.conf文件中或者添加到/etc/ld.so.conf.d/*.conf中,然后使用ldconfig進行更新,進行動態鏈接庫的運行時動態綁定。如:

添加文件/etc/ld.so.conf.d/foo.conf,內容如下:

/usr/local/lib
然后執行如下命令:

# ldconfig

就可以正常的運行了。



參考文章:https://gcc.gnu.org/ml/gcc-help/2005-12/msg00017.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM