我正在运行mkl_lab_solution.c这是使用MKL的一个例子,我可以正确编译它,当我运行它时,我得到了分段错误。我的运行时如下:
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
答案 0 :(得分: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库与为不同接口层编译的对象相关联。