gcc -wl,-rpath=參數

使用GCC編譯動態鏈接庫的項目時,在其他目錄下執行很可以出現找不到動態鏈接庫的問題。
這種情況多發生在動態鏈接庫是自己開發的情況下,原因就是程序運行時找不到去何處加載動態鏈接庫。
可能會說在編譯時指定了鏈接的目錄啊? 編譯時指定的 -L的目錄,只是在程序鏈接成可執行文件時使用的。程序執行時動態鏈接庫加載不到動態鏈接庫。

解決辦法有兩種:

  1. 程序鏈接時指定鏈接庫的位置,就是使用-wl,-rpath=<link_path>參數,<link_path>就是鏈接庫的路徑。如:

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

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

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

  2. 是將鏈接庫的目錄添加到/etc/ld.so.conf文件中或者添加到/etc/ld.so.conf.d/*.conf中,然後使用ldconfig進行更新,進行動態鏈接庫的運行時動態綁定。如:
    添加文件/etc/ld.so.conf.d/foo.conf,內容如下:

    #vim /etc/li.so.conf
    /usr/local/lib

    然後執行如下命令:

    #ldconfig

    就可以正常的運行了。

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