我反覆遇到沒有找到的庫的問題。如何通過LD_LIBRARY_PATH和鏈接非常正確地獲得它?
在我的.bashrc我:
LD_LIBRARY_PATH=
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib1
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib2
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib3
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH
這些路徑包含從那裏我鏈接庫到我的程序與-L/LIB1 -l1a -L/LIB2 -l2a -L/LIB3 -l3a所有文件夾。
現在我開始我的程序獨立:
./program
也好!
然後,我開始mpiexec的從MPICH:
/mpich/intel/bin/mpiexec -np 2 ./solvertest1
也好!
但後來我啓用了GDB啓動:
/mpich/intel/bin/mpiexec -np 2 gdb ./solvertest1
問題,圖書館都沒有發現:
Starting program: /my/program
/my/program: error while loading shared libraries: libirng.so: cannot open shared object file: No such file or directory
我懷疑有些不對勁時,LD_LIBRARY_PATH應該通過所有的子進程傳播並將這些腳本和程序產生的shell ...我需要做什麼才能讓每個子進程(以及其他任何將啓動的)知道這些庫在哪裏?
如果你有root權限:不要使用'LD_LIBRARY_PATH'。將所有非系統庫放在'/ usr/local/lib'中,將該路徑添加到'/etc/ld.so.conf',在有用時運行'ldconfig'。 – 2014-09-05 18:04:32
你在調用'export'的自我賦值是多餘的; 'export LD_LIBRARY_PATH'就足夠了。此外,由於'export'命令只是將變量*名稱標記爲可導出的(它不會將值推入環境中),因此可以在創建過程之前的任何時候完成該過程,其環境將由導出的變量組成。 – chepner 2014-09-05 18:43:28