环境: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!
),但我认为这不是一个激进的解决方案。仍然需要答案,任何帮助将不胜感激
最佳答案
似乎 pkg-config
元数据文件不适用于外部环境变量,即使您正确导出了它们。
但是pkg-config
对此有另一种机制。您可以设置PKG_CONFIG_MKL_DYNAMIC_LP64_IOMP_MKLROOT
:
$ echo $MKLROOT
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl
$ pkg-config --cflags mkl-dynamic-lp64-iomp
Variable 'MKLROOT' not defined in '/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/bin/pkgconfig/mkl-dynamic-lp64-iomp.pc'
$ export PKG_CONFIG_MKL_DYNAMIC_LP64_IOMP_MKLROOT=$MKLROOT
$ pkg-config --cflags mkl-dynamic-lp64-iomp
-I/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/include
一般情况下,环境变量PKG_CONFIG_XXX_VVV
将覆盖变量 VVV
包装内XXX
.两个XXX
和 VVV
必须为大写,并且将非字母数字字符转换为下划线。 (见 man pkg-config
)(请注意,您的包是
imkl-dynamic-lp64-iomp
,没有 .pc
扩展名。)
关于linux - $MKLROOT 未定义(Ubuntu),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62298109/