我正在运行mkl_lab_solution.c这是使用MKL的一个例子,我可以正确编译它,当我运行它时,我得到了分段错误 . 我的运行时如下:
-
操作系统是6.3
-
gcc的版本是4.1.2
-
mkl是mkl_10.3.12.361
-
makefile如下
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.361 / compiler / lib / intel64 -liomp5 - L / usr / lib64 -lstdc -I / opt / intel / composer_xe_2011_sp1.12.361 / mkl / include -o test mkl-lab-solution.c
1 回答
由于这在我的系统上工作正常,让我指出可能的错误 . 首先,您需要运行
. /path/to/intel/compilervars.sh intel64
这样设置所有环境变量,如MKLROOT
. 其次,检查intel mkl link line advisor以获取系统上的选项 . 所以阅读你的编译命令我猜:linux,gnu编译器,动态链接,64位目标架构,64位长指针,多线程,intel omp库 .这些设置给了我:
linker options:
-L$(MKLROOT)/lib/intel64 -lmkl_intel_ilp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm
compile options:
-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库与为不同接口层编译的对象相关联 .