与2个库链接

时间:2018-12-16 08:13:55

标签: makefile linker fortran shared-libraries intel

我正在尝试通过以下方式将程序与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。我该如何解决这个问题?

1 个答案:

答案 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链接库。