【发布时间】:2014-09-05 17:54:20
【问题描述】:
我经常遇到找不到库的问题。
在我的 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 传播时出现问题...我必须做些什么才能让每个子进程(以及将启动的任何其他进程)知道那些图书馆是?
【问题讨论】:
-
如果你有root权限:不要使用
LD_LIBRARY_PATH。将所有非系统库放入/usr/local/lib,将该路径添加到/etc/ld.so.conf,在有用时运行ldconfig。 -
您对
export的调用中的自分配是多余的;export LD_LIBRARY_PATH就足够了。此外,由于export命令只是将变量 name 标记为可导出(它不会将值推送到环境中),因此可以在创建其环境的进程之前的任何时间完成将由导出的变量组成。
标签: c++ bash mpi ld dynamic-linking