【问题标题】:Linking MKL library in C++在 C++ 中链接 MKL 库
【发布时间】: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 将在执行时给您一个段错误。

标签: c++ intel-mkl


【解决方案1】:

我认为您应该将 -DMKL_ILP64 -I"%MKLROOT%"\include 用于 g++。 您绝对不应该为编译器选择 Intel(R) Fortran,因为您不是在编译 Fortran 程序。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-10-18
  • 1970-01-01
  • 1970-01-01
  • 2020-09-05
  • 1970-01-01
  • 2022-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多