工作环境:Linux、Ubuntu 16.04
我试着从英特尔网站(https://software.intel.com/content/www/us/en/develop/tools/math-kernel-library.html)下载MKL库,并尝试将MKL链接到我的程序。
(我只是下载了l_mkl_2020.1.217.tar
文件,解压缩它,并在该文件中运行./install.sh
)
但每次我试图建立,下面的消息被打印出来
$ pkg-config --cflags --libs mkl-dynamic-lp64-iomp.pc
Variable 'MKLROOT' not defined in 'mkl-dynamic-lp64-iomp.pc
即使我尝试export MKLROOT=/opt/intel/mkl
(这是我的mkl根路径),它仍然找不到MKLROOT
路径
我也试着运行test.sh文件如下,
echo $MKLROOT
它清楚地打印出MKLROOT
变量。
intel .pc文件中的变量与Ubuntu上的环境变量有些不同?为什么我的mkl无法访问MKLROOT
变量?
如果有人能回答这个问题,我将非常感谢你。谢谢你,谢谢
- 加法-
我只是通过添加单行来解决这个问题MKLROOT=/opt/intel/mkl
在mkl-dynamic-lp64-iomp.pc
的第一部分(即使是只读文件,我只是输入wq!
),但我认为这不是一个激进的解决方案。仍然需要答案和任何帮助将不胜感激
3条答案
按热度按时间ecbunoof1#
pkg-config
元数据文件似乎不适用于外部环境变量,即使您正确地导出了它们。但
pkg-config
对此有另一种机制。您可以设置PKG_CONFIG_MKL_DYNAMIC_LP64_IOMP_MKLROOT
:通常,环境变量
PKG_CONFIG_XXX_VVV
将覆盖包XXX
中的变量VVV
。XXX
和VVV
都必须大写,并且非字母数字字符转换为下划线。(见man pkg-config
)(Note您的软件包是
imkl-dynamic-lp64-iomp
,没有.pc
扩展名。xkrw2x1b2#
我不确定我理解这个问题。要设置正确的环境变量,您必须调用script(mklvars.sh)来设置此环境变量。例如,如果使用英特尔编译器,请访问mklvars.sh ia 32/intel 64或compilervars.sh ia 32/intel 64。
8zzbczxx3#
在
<mkl_install_dir>/mkl/bin/
目录下应该有一个名为mklvars.sh
的脚本,它可以为您设置所有必要的环境变量(如MKLROOT)。(我相信你每次想使用MKL时都需要这样做,或者你可以将它添加到你的./bashrc
文件中,这样你每次打开shell时它都会被引用。关于设置pkg-config文件,以下是来自Intel documentation的说明:
调整pkg-config元数据文件中的编译和链接选项:
1.转到<mkl_install_dir>/mkl/bin/pkgconfig目录。
1.指定${prefix}变量,该变量包含“英特尔MKL”目录的完整路径,如果需要另一个MKL路径,可以更改该路径。
1.指定库:pkg_config --libs返回的链接行。您可以使用英特尔MKL链接线顾问或离线英特尔MKL链接线工具获取英特尔MKL配置的首选链接线。在建议程序返回的链接行中,确保将外部环境变量${MKLROOT}更改为内部pkg-config ${prefix},因为pkg-config元数据文件将无法使用外部环境变量。但是,您可以使用pkg-config工具在外部设置它(有关详细信息,请参阅pkg-config工具手册页)。
1.指定Cflags:pkg-config --cflags将返回的编译器选项。您也可以更新它(请参阅步骤3中的说明)。
英特尔MKL Link Line Advisor提供here版本。
在我的情况下,它足以做到步骤1和2;链接行和包含目录是正确的。如果您计划在GNU编译器中使用MKL,则可能需要更改此设置。