-rpath和-rpath-link
假設有3個文件,在同一目錄下,有這樣的依賴關系
test->liba.so->libd.so
如果編譯test的時候這樣寫
gcc test.c –la
warning:libd.so, needed by liba.so not found
解決辦法有3個
方法1
gcc test.c –la –ld
方法2
gcc test.c –la -Wl,-rpath-link ./
這樣就告訴編譯器,當要尋找liba的依賴庫時候,請到 ./去找
方法3
gcc test.c –la -Wl,-rpath ./
這樣就告訴編譯器,當要尋找liba的依賴庫時候,請到 ./去找
方法2和方法3有什么區別呢?
-rpath和-rpath-link都可以在鏈接時指定庫的路徑;但是運行可執行文件時,-rpath-link指定的路徑就不再有效(鏈接器沒有將庫的路徑包含進可執行文件中),而-rpath指定的路徑還有效,程序回到指定的路徑中去找庫(因為鏈接器已經將庫的路徑包含在可執行文件中了。)最后,不管使用了-rpath還是-rpath-link,LD_LIBRARY_PATH還是有效的。