在MKL库中设置openmp 我试图编译一个最小的C++代码< /p> #include <iostream> #include <mkl.h> #include <omp.h> int main(int argc, char *argv[]) { omp_set_num_threads(4); return 0; }

在MKL库中设置openmp 我试图编译一个最小的C++代码< /p> #include <iostream> #include <mkl.h> #include <omp.h> int main(int argc, char *argv[]) { omp_set_num_threads(4); return 0; },c++,openmp,intel-mkl,C++,Openmp,Intel Mkl,但是,当我运行程序时,我收到以下错误 dyld: Library not loaded: @rpath/libiomp5.dylib Referenced from: /Users/user/C++/MKL1/./main.o Reason: image not found /bin/sh: line 1: 8898 Abort trap: 6 ./main.o make: *** [run] Error 134 如何使用MKL库正确设置openmpi?我试着按照指示

但是,当我运行程序时,我收到以下错误

dyld: Library not loaded: @rpath/libiomp5.dylib
  Referenced from: /Users/user/C++/MKL1/./main.o
Reason: image not found
/bin/sh: line 1:  8898 Abort trap: 6           ./main.o
make: *** [run] Error 134
如何使用MKL库正确设置openmpi?我试着按照指示去做

加入

 source /opt/intel/compilers_and_libraries_2017.4.181/mac/mkl/bin/mklvars.sh intel64
但是,在运行时我仍然会遇到相同的错误

我在网上找到了答案

基本上,我们必须补充一点 -Wl,-rpath,/opt/intel/compilers_和_libraries_2017.4.181/mac/compiler/lib


在汇编期间。现在openmp与icc完美结合

我尝试了几种方法来解决这个问题。真的花了整整一天的时间。但结果如下:

项目文件

我创建了一个非常简单的项目,只有一个文件,名为

test.c
1.最简单的解决方案 解决这个问题非常简单

icc -qopenmp -qopenmp-link=static test.c
此方法只是告诉编译器链接到静态OpenMP运行时库

有趣的是,网站上的文档说这是不推荐的,但甚至没有提到这个参数,但它是有效的。可能他们忘了把它拿出来

2.另一种方法(我不推荐,英特尔的人也不推荐) 要编译文件,可以使用正常的“-qopenmp”标志

这将创建“a.out”文件

这种修复错误的方法使用命令行实用程序

install_name_tool
使用此方法可以更改@rpath/libiomp5.dylib的路径

install_name_tool -change @rpath/libiomp5.dylib /opt/intel/compilers_and_libraries_2018.1.126/mac/compiler/lib/libiomp5.dylib a.out
注意:代替编译器和库\u 2018.1.126它应该是您的编译器版本

3.最好的(正确的)方法之一 你可以加上

export DYLD_LIBRARY_PATH="/opt/intel/compilers_and_libraries_2018.1.126/mac/compiler/lib"
到您的~/.bash\u档案

然后用正常的编译方式,

icc -qopenmp test.c
一切都很完美


快速提示:您可以使用otool命令行实用程序检查文件链接到的库

otool -L a.out

我似乎记得icc使用-OpenMP编译OpenMP代码,而没有链接到(外部)库(-liomp5)。不确定这是否仍然正确。在Xcode中,必须在运行路径搜索路径中添加/opt/intel/compilers_和_libraries_2017.4.181/mac/compiler/lib
icc -qopenmp test.c
otool -L a.out