编译使用带有gfortran的英特尔MKL模块的代码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编译使用带有gfortran的英特尔MKL模块的代码相关的知识,希望对你有一定的参考价值。
我想使用gfortran
编译一些使用Mac上英特尔MKL库中的mlk_vsl.f90
的代码。
我正在做以下事情:
gfortran -o filename filename.f90 -I/${MKLROOT}/include
我收到此错误:
"Can't open module file 'mkl_vsl_type.mod" for reading at (1): No such file or directory"
我知道我必须创建.mod
文件,但我不确定如何。
答案
你正在编译的正确轨道(如果添加-c
)。一些建议:
- 尝试添加
-fno-range-check
,这是让gfortran正确编译mkl_vsl模块所需的(编译主程序时自动创建的.mod文件) - 不知道为MKLROOT设置了什么,你可能会有额外的反斜杠;试试
-I${MKLROOT}/include
但是,对于链接,您可能需要其他库。查看如何链接的最简单方法是查看MKLROOT目录mkl/examples/vslf/source
中的一个示例,其中包含使用mkl_vsl的源文件。在mkl/examples/vslf
中,有一个makefile可以运行以生成可执行文件并打印链接行。使用make help
获取更多信息。例如,使用gfortran和静态链接编译vslssort.f:make libintel64 compiler=gnu function=vslssort
。请注意两个警告:链接行使用libmkl_intel_thread.a
而不是libmkl_gnu_thread.a
,它使用-J标志将创建的.mod文件放在必须在链接之前创建的不同目录中。
以上是关于编译使用带有gfortran的英特尔MKL模块的代码的主要内容,如果未能解决你的问题,请参考以下文章
gfortran使用`-dec-math`给`dacosd_`提供未定义的引用
即使使用 `-dec-math`,gfortran 也会对 `dacosd_` 给出未定义的引用