簡體   English   中英

LD_LIBRARY_PATH,Linux中的共享庫路徑

[英]LD_LIBRARY_PATH, the shared lib path in linux

我寫了一個共享對象,例如libsd.so ,然后將libsd.so及其頭文件sd.h放入~/lib

這是另一個使用libsd.so程序,例如test.c ,然后像這樣編譯它:

$ gcc -o test test.c -I~/lib -L~/lib -lsd

然后我像這樣運行test

$ ./test
./test_sd: error while loading shared libraries: libsd.so: cannot open shared object file: No such file or directory

所以我設置了export LD_LIBRARY_PATH=. ,那么它起作用了。 但是,如果我unset LD_LIBRARY_PATH並將LD_LIBRARY_PATH=~/lib放入我的~/.bashrc ,那么source ~/.bashrc ,同樣對於./test ,為什么?

export LD_LIBRARY_PATH=~/lib與將LD_LIBRARY_PATH=~/lib放入~/.bashrc有何不同?

如果沒有導出,則聲明的LD_LIBRARY_PATH僅在腳本(.bashrc)中有效。 通過導出,它應該可以工作,但是像這樣設置LD_LIBRARY_PATH通常不是一個好主意。

如果您不想在系統路徑(例如/ usr / lib)中安裝您的庫,則可能應該使用一個腳本,該腳本在本地設置LD_LIBARAY_PATH並啟動您的應用程序。

嘗試使用$HOME/lib而不是~/lib應該是相同的,但是我已經看到在變量分配中使用~時未正確擴展的情況。

要進行檢查,請嘗試echo $LD_LIBRARY_PATH ,它會為您提供當前值。

重新export :如果省略export ,則該變量僅對當前的shell進程是已知的,不會導出到子進程。 因此,如果您忽略它,則echo $LD_LIBRARY_PATH將獲得該值,因為在echo命令/內建函數有機會執行任何操作之前 ,shell會擴展該變量。 但是./test不會看到它,因為它沒有導出到新的子./test

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM