我一再遇到未找到的库的问题。
在我的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
精细!
然后我从mpich开始使用mpiexec:
/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会出现问题...我需要做什么才能让每个子进程(以及其他任何将要启动的)知道哪些图书馆是?
答案 0 :(得分:5)
链接
时,将库路径存储在可执行文件的DT_RPATH
标记中
-Wl,rpath=/lib1 -Wl,rpath=/lib2 -Wl,rpath=/lib3
这样你就不需要弄乱LD_LIBRARY_PATH
和shell初始化了。
答案 1 :(得分:2)
由于程序依赖于将正确的环境变量设置为运行,并且mpiexec没有给它所需的环境,请尝试使用mpiexec文档中的类似内容:
-x, - envall 将所有环境变量导出到所有进程。
-E, - env name value 使用内容值导出变量名称。