在MKL Library中设置openmp

时间:2017-05-24 15:02:22

标签: c++ openmp intel-mkl

我正在尝试编译一个最小的C ++代码

#include <iostream>
#include <mkl.h>
#include <omp.h>

int main(int argc, char *argv[])
{
omp_set_num_threads(4);

return 0;
}

在MacOSX Sierra 10.12.5中使用MKL库(icc版本17.0.4),使用命令

icc main.cpp -o main.o -DMKL_ILP64 -I/opt/intel/compilers_and_libraries_2017.4.181/mac/mkl/include \
  -L/opt/intel/compilers_and_libraries_2017.4.181/mac/mkl/lib -Wl,-rpath,/opt/intel/compilers_and_libraries_2017.4.181/mac/mkl/lib -lmkl_intel_ilp64 \
  -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm -ldl

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

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?我试图按照https://software.intel.com/en-us/articles/dyld-library-not-loadedlibiomp5dylib?page=1#comment-1905809

中的说明进行操作

添加

 source /opt/intel/compilers_and_libraries_2017.4.181/mac/mkl/bin/mklvars.sh intel64

但是我在运行时仍然遇到同样的错误。

2 个答案:

答案 0 :(得分:1)

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

  

项目档案

我用一个名为

的文件创建了一个非常简单的Project
test.c

1。最简单的解决方案

修复此问题可以简单,

icc -qopenmp -qopenmp-link=static test.c

此方法只是告诉编译器链接到静态OpenMP运行时库。

有趣的是,Intel C++ Compiler Docs v.15处的文档表示这已被弃用,而Intel C++ Compiler Docs v.17甚至没有提及此论点,但它有效。可能他们忘了拿出来。

2。另一种方法(我不推荐,也不是英特尔人)

要编译文件,您可以使用正常的“-qopenmp”标志

icc -qopenmp test.c

这会创建“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

注意:取代 compilers_and_libraries_2018.1.126 ,它应该是您的编译器版本。

3。最好的(正确)方式之一

您只需添加

即可
export DYLD_LIBRARY_PATH="/opt/intel/compilers_and_libraries_2018.1.126/mac/compiler/lib"

〜/ .bash_profile

然后使用正常的编译方式,

icc -qopenmp test.c

一切都很完美。

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

otool -L a.out

答案 1 :(得分:0)

我在https://software.intel.com/en-us/forums/intel-fortran-compiler-for-linux-and-mac-os-x/topic/645194

找到了答案

基本上必须添加 -Wl,-rpath,/ opt / intel / compilers_and_libraries_2017.4.181 / mac / compiler / lib

编译期间。现在openmp与icc完美配合