未定义$MKLROOT(Ubuntu)

aij0ehis  于 2023-10-17  发布在  其他
关注(0)|答案(3)|浏览(145)

工作环境: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!),但我认为这不是一个激进的解决方案。仍然需要答案和任何帮助将不胜感激
ecbunoof

ecbunoof1#

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将覆盖包XXX中的变量VVVXXXVVV都必须大写,并且非字母数字字符转换为下划线。(见man pkg-config
(Note您的软件包是imkl-dynamic-lp64-iomp,没有.pc扩展名。

xkrw2x1b

xkrw2x1b2#

我不确定我理解这个问题。要设置正确的环境变量,您必须调用script(mklvars.sh)来设置此环境变量。例如,如果使用英特尔编译器,请访问mklvars.sh ia 32/intel 64或compilervars.sh ia 32/intel 64。

8zzbczxx

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,则可能需要更改此设置。

相关问题