Fortran Coder

标题: 请教几个关于mkl库的编译问题 [打印本页]

作者: joezhr    时间: 2021-8-5 11:07
标题: 请教几个关于mkl库的编译问题
本帖最后由 joezhr 于 2021-8-5 11:07 编辑

各位前辈好,最近在Linux下用ifort编译多个.f90文件,由于代码中用到了openmp和mkl的函数,我参考了Inter Fortran Compiler Help中的内容,在编译时分别采用了如下的命令:
[Fortran] 纯文本查看 复制代码
ifort -qopenmp -o test file1.f90 file2.f90 ... filen.f90 

报错内容是:
xxx.f90:对'mkl_get_max_threads'未定义的引用
xxx.f90:对'pardiso_'未定义的引用

发现是忘记了包含mkl库头文件,于是在命令中加上了-mkl,即
[Fortran] 纯文本查看 复制代码
ifort -qopenmp -mkl -o test file1.f90 file2.f90 ... filen.f90 

又出现了新的报错:
ld:找不到 -lmkl_intel_lp64
ld:找不到 -lmkl_intel_thread
ld:找不到 -lmkl_intel_core

我搜索了一下,这里好像是缺少动态库,请问这些动态库是在mkl里本身存在的吗?是否是没有包含进来呢?

作者: li913    时间: 2021-8-5 11:13
-I"${MKLROOT}/include"


-Wl,--start-group ${MKLROOT}/lib/intel64/libmkl_intel_ilp64.a ${MKLROOT}/lib/intel64/libmkl_intel_thread.a ${MKLROOT}/lib/intel64/libmkl_core.a -Wl,--end-group -liomp5 -lpthread -lm -ldl
作者: joezhr    时间: 2021-8-5 11:37
本帖最后由 joezhr 于 2021-8-5 17:22 编辑
li913 发表于 2021-8-5 11:13
-I"${MKLROOT}/include"

前辈您好,我在原命令中增加了您提供的代码后出现了以下报错:
ifort: error#10236: File not found: 'lib/intel64/libmkl_intel_ilp64.a
ifort: error#10236: File not found: 'lib/intel64/libmkl_intel_thread.a
ifort: error#10236: File not found: 'lib/intel64/libmkl_intel_core.a
请问这个应如何处理呢?
之后又尝试了OneAPI的Get Started Guide中提供的例子,将命令改成了
[Fortran] 纯文本查看 复制代码
ifort -qopenmp -mkl -o test file1.f90 file2.f90 ... filen.f90 -L${MKLROOT}/lib/intel64 -lmkl_intel_lp64-lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm -ldl

但依然提示找不到-lmkl_intel_lp64,-lmkl_intel_thread和-lmkl_intel_core

刚刚又尝试重新加载一遍OneAPI的环境变量,发现是指令后少了Intel64,经以下操作后问题解决:
[Fortran] 纯文本查看 复制代码
source /home/username/intel/oneapi/setvars.sh intel64






欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2