使用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.d/foo.conf,內容如下:
/usr/local/lib然后執行如下命令:
# ldconfig
就可以正常的運行了。