Compile Time:
編譯時系統預設會從/lib, /usr/lib尋找so檔.
但如果你的so檔不在預設目錄裡面,
就必須指定, ex:
g++ -L /usr/local/lib -I /usr/local/include test.cc -lfoo -o test
-l: 程式會用到libfoo.so這個library
-L: 從/usr/local/lib位置尋找library
-I: 從/usr/local/include位置尋找header
Runtime:
執行時找不到library的情況
1. LD_LIBRARY_PATH
設定後會從這個目錄找library, ex:
LD_LIBRARY_PATH=/usr/local/lib test
指定目錄後執行test
2. 添加系統預設搜尋目錄
在/etc/ld.so.conf裡面添加目錄
然後執行sudo ldconfig更新目錄cache
接著再執行test
3. 編譯時加入rpath選項
rpath可以指定執行時搜尋目錄
g++ -L /usr/local/lib -I /usr/local/include -Wl,-rpath=/usr/local/lib test.cc -lfoo -o test
沒有留言:
張貼留言