[英]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.