0

我正在运行mkl_lab_solution.c,这是使用 MKL 的一个示例,我可以正确编译它,而我运行它时,我遇到了分段错误。我的运行时间如下:

  1. 操作系统是centos 6.3
  2. gcc 的版本是 4.1.2
  3. mkl 是 mkl_10.3.12.361
  4. 生成文件在下面

    gcc -g -L/opt/intel/composer_xe_2011_sp1.12.361/mkl/lib/intel64 -lmkl_intel_ilp64 -lmkl_intel_lp64 -lmkl_intel_sp2dp -lmkl_intel_thread -lmkl_core -lpthread -L/opt/intel/composer_xe_2011_sp1.12.4-361 l/usr/lib64 -lstdc++ -I/opt/intel/composer_xe_2011_sp1.12.361/mkl/include -o test mkl-lab-solution.c

4

1 回答 1

3

由于这在我的系统上运行良好,让我指出可能的错误。首先,你需要运行. /path/to/intel/compilervars.sh intel64这样所有的环境变量设置,比如MKLROOT. 其次,检查intel mkl link line advisor以了解您系统上的选项。所以阅读你的编译命令我猜:linux、gnu 编译器、动态链接、64 位目标架构、64 位长指针、多线程、intel omp 库。

这些设置给了我:

链接器选项:

-L$(MKLROOT)/lib/intel64 -lmkl_intel_ilp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm

编译选项:

-DMKL_ILP64 -m64 -I$(MKLROOT)/include

无论出于何种原因,围绕 MKLROOT 的括号在 bash 上都不起作用,所以只需将它们删除即可。接下来记得将所有编译选项放在链接器选项之前。最后的命令行应该是这样的:

gcc mkl-lab-solution.c -DMKL_ILP64 -m64 -I$MKLROOT/include -L$MKLROOT/lib/intel64 -lmkl_intel_ilp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm

由于您遇到运行时错误,我怀疑您将英特尔 MKL 库与为不同接口层编译的对象链接。

于 2013-05-15T15:45:52.217 回答