我正在尝试通过以下方式将程序与2个库链接:
LNOPT = -Wl,-rpath,$(MKLROOT)/lib/intel64 -Wl,-rpath,/opt/intel/compilers_and_libraries_2019.0.117/linux/compiler/lib/intel64_lin
但是我遇到以下错误之一:
./dftb+: error while loading shared libraries: libmkl_gf_lp64.so: cannot open shared object file: No such file or directory
./dftb+: error while loading shared libraries: libiomp5.so: cannot open shared object file: No such file or directory
取决于我首先使用哪个-rpath。我该如何解决这个问题?
答案 0 :(得分:1)
是否在运行时将两个路径(由:
分隔)放入环境变量LD_LIBRARY_PATH
中? (通过这种方式,硬编码的rpath不必工作。)
示例:
LD_LIBRARY_PATH=$(MKLROOT)/lib/intel64:/opt/intel/compilers_and_libraries_2019.0.117/linux/compiler/lib/intel64_lin ./dftb+
或将export LD_LIBRARY_PATH=$(MKLROOT)/lib/intel64:/opt/intel/compilers_and_libraries_2019.0.117/linux/compiler/lib/intel64_lin
放在某个配置文件rc
文件中,以便始终设置库路径。
在任何一种情况下,如果LD_LIBRARY_PATH
中已经需要其他路径,则通过LD_LIBRARY_PATH=$(MKLROOT)/lib/intel64:/opt/intel/compilers_and_libraries_2019.0.117/linux/compiler/lib/intel64_lin:$LD_LIBRARY_PATH
将以上内容添加到其中,而不是简单地完全覆盖LD_LIBRARY_PATH
。
可能/应该工作的是source
随英特尔编译器和MKL一起提供的环境变量设置.sh
文件,除其他变量(例如MKLROOT)外,还应设置LD_LIBRARY_PATH指向libiomp5.so
和动态MKL链接库。