【发布时间】:2020-05-10 20:42:44
【问题描述】:
我在将英特尔 MKL 库链接到我的 C++ 代码时遇到了很多麻烦。我从这个链接下载了 MKL 库: https://software.intel.com/content/www/us/en/develop/tools/math-kernel-library/choose-download/windows.html
然后它说使用 MKL Link Line Advisor 来获得正确的编译器选项,我很难弄清楚。作为参考,我使用的是 Windows、g++ 8.1.0 和 MinGW-W64。以下是部分内容:
英特尔产品:英特尔 MKL 2020,因为我刚刚下载了它。
操作系统:Windows,没有问题。
编译器:Intel(R) Fortran?我正在使用 g++ 编译我的 C++ 代码,所以 我不知道,因为该选项不可用。做一些 在stackoverflow的研究中,似乎正确的选择是Intel(R) Fortran
架构:Intel(R) 64,因为我有 64 位操作系统?
动态/静态链接:我猜是静态链接?
接口层:64 位,因为我有 64 位操作系统?
线程层:OpenMP,因为我当前的 C++ 代码使用 -fopenmp?
OpenMP 库:Intel(R) libiomp5。只有一个选项,所以没有问题 在这里。
Fortran95 接口:BLAS95 和 LAPACK95
以上选择为我提供了以下编译器选项
/4I8 /module:"%MKLROOT%"\include\intel64/ilp64 -I"%MKLROOT%"\include
这会导致编译器出错:
/4I8: No such file or directory
有人可以帮帮我吗?
【问题讨论】:
-
我曾经尝试在 MinGW 下链接 MKL,但在链接过程中出现许多“未定义符号”失败。不过,尝试选择 Linux,然后选择 GNU C/C++ 编译器。请注意,MinGW(和 Linux)下的命令选项使用
-指定,而不是/。您可以在 64 位应用程序中使用 64 位和 32 位接口层。如果您使用 64 位接口,则应添加-DMKL_ILP64编译器选项(类似于/4I8,这是纯 Fortran 选项),与 64 位库链接而不定义MKL_ILP64将在执行时给您一个段错误。