c++ - 如何更改路径以修复错误“./main : error while loading shared library libmkl_core. 所以?

标签 c++ linux path shared-libraries intel-mkl

我已经安装了英特尔 mkl 库。内容有路径/home/user/intel/....... 。我必须使用提到的 make 文件运行 C++ 代码。

CC = /home/user/intel/bin/icpc -g
INCLUDE = -I/home/user/intel/mkl/include 
LIB = -L/home/user/intel/mkl/lib/intel64 -lmkl_core -lmkl_intel_lp64 -lmkl_intel_thread -liomp5 -lpthread -std=c++11

我已成功安装 parallel_studio_xe_2019_update5_cluster_edition 。但我仍然收到错误消息 ./main :error while loading shared libraries。我该如何解决这个错误。我需要做哪些改变?

最佳答案

与共享库的链接实际上分两步完成:构建时(链接器需要找到库的地方);以及运行时(操作系统动态加载时需要查找库时)。

当使用安装在非标准位置的库进行构建时,您可以使用 -L 选项告诉链接器在哪里可以找到库。不幸的是,它没有告诉动态加载程序库所在的位置。

要告诉动态加载器动态库的位置有几种方法,我推荐的方法是在构建时添加一个标志,以便链接器将位置嵌入可执行程序文件中供动态加载器查看.这是通过选项 -Wl,-rpath,/path/to/lib/directory 完成的。

在您的情况下,您需要将选项 -Wl,-rpath,/home/user/intel/mkl/lib/intel64 添加到 LIB 生成文件变量。


为了澄清,完整的行应该是

LIB = -L/home/user/intel/mkl/lib/intel64 -Wl,-rpath,/home/user/intel/mkl/lib/intel64 -lmkl_core -lmkl_intel_lp64 -lmkl_intel_thread -liomp5 -lpthread -std=c++11 

也就是说,您需要两个旧的 -L 选项(因为您当前在显示的代码中有它)添加新选项。

关于c++ - 如何更改路径以修复错误“./main : error while loading shared library libmkl_core. 所以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58029530/

相关文章:

c# - 从完整文件名路径获取文件夹名称

c++ - 如何概括一个接口(interface)以要求某些元组的返回值?

node.js - AWS环境下如何查看stdout?

linux - 用于获取 USB 信息的 udev/Bash 脚本

java - 任务 ':app:compileDebugKotlin' java.io.IOException 执行失败

search - 我们如何保护自己免受其他第三方将与我们的某些名称相同的 DLL 安装到 C 中的影响 :\WINDOWS?

c++ - 我如何使用 Boost Random

c++ - "used after it was moved [bugprone-use-after-move]"警告是这里的真正问题吗?

c++ - 遍历 vector 的所有成员

python - PIP 安装无法找到 ffi.h,即使它识别 libffi