Mic*_*ael 1 c++ bash mpi dynamic-linking ld
我一再遇到没有找到的库的问题.
在我的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
Run Code Online (Sandbox Code Playgroud)
这些路径包含所有文件夹,我使用-L/lib1 -l1a -L/lib2 -l2a -L/lib3 -l3a将库链接到我的程序.
现在我独立开始我的程序:
./program
Run Code Online (Sandbox Code Playgroud)
精细!
然后我从mpich的mpiexec开始吧:
/mpich/intel/bin/mpiexec -np 2 ./solvertest1
Run Code Online (Sandbox Code Playgroud)
精细!
然后我启动gdb启动它:
/mpich/intel/bin/mpiexec -np 2 gdb ./solvertest1
Run Code Online (Sandbox Code Playgroud)
问题,找不到库:
Starting program: /my/program
/my/program: error while loading shared libraries: libirng.so: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我怀疑LD_LIBRARY_PATH应该通过所有子进程传播并且那些脚本和程序产生的shell会出现问题...我需要做什么才能让每个子进程(以及其他任何将被启动的)知道这些库的位置?
DT_RPATH
链接时将库路径存储在可执行文件的标记中
-Wl,rpath=/lib1 -Wl,rpath=/lib2 -Wl,rpath=/lib3
那样你就不需要搞乱LD_LIBRARY_PATH
和shell初始化了.