一步步

一步步

我有一个困扰我很长时间的问题。我正在使用 Intel C++ 编译器,其中包含 shell 脚本来设置库路径的环境变量,包括路径等。采购这些脚本.bashrc就像终端的魅力一样。不幸的是,我需要环境变量数学NetBeans C++这也让我想到了一个问题,如何获取英特尔脚本,以便我启动的 GUI 程序能够识别它们。

我仔细地搜索了网络,我想我已经找到了这个问题,尽管我没有解释。为 Gnome 设置环境变量的一种方法似乎是创建一个*.sh脚本,/etc/profile.d/然后由/etc/profile.

虽然,关于此信息不推荐这样做/etc/profile,请注意,我有一个 shell 脚本,需要获取源代码,而不仅仅是一些export VAR=blub设置。

如果我使用egmklvars.sh脚本执行此操作,则似乎未获取完整的文件。让我从文件中截取一段内容来说明我的意思

#! /bin/sh
#
# Copyright (C) 
# ...lot of boring stuff

CPRO_PATH=/opt/intel/composer_xe_2013_sp1.0.080
export MKLROOT=${CPRO_PATH}/mkl

SCRIPT_NAME=$0
MOD_NAME=mod

# .... some more code here ...

if [ -z "${MKL_TARGET_ARCH}" ] ; then

    echo
    echo "ERROR: architecture is not defined. Accepted values: ia32, intel64, mic"
    mkl_help

    else

    if [ -n "${LD_LIBRARY_PATH}" ] ; then OLD_LD_LIBRARY_PATH=":${LD_LIBRARY_PATH}"; fi
    export LD_LIBRARY_PATH="${CPRO_PATH}/compiler/lib/${MKL_TARGET_ARCH}: #.....

当我现在再次注销/登录时,MKLROOT变量已定义但未LD_LIBRARY_PATH调整。export VAR在采购 .net 文件时,似乎会跳过比简单的更复杂的事情.profile


问题:有没有一种方便的方法来获取 X-Session 的编译器变量脚本(在我的例子中是 Gnome)?有人知道这里出了什么问题吗?


解决这个问题的明显技巧是在手动获取脚本并将它们放入全局profile.这样做的缺点是,我在编译器的每次更新时都会一遍又一遍地执行此操作。

一步步

让我一步步展示,以便您看到我并不是完全疯了。为此我把数学内核库脚本在pastebin上,我从以下情况开始:

  • 我没有在任何 或其他文件中获取该bashrc脚本profile
  • 我已经退出并重新登录

对于测试,我们查看$MKLROOT$LD_LIBRARY_PATH,两者都应该由脚本更改。目前,当我检查它们的值时,它们没有设置

echo $LD_LIBRARY_PATH
echo $MKLROOT

当我手动获取文件时,我得到:

source /opt/intel/composer_xe_2013_sp1.0.080/mkl/bin/mklvars.sh intel64
echo $MKLROOT
echo $LD_LIBRARY_PATH

# Output:
# /opt/intel/composer_xe_2013_sp1.0.080/mkl
# opt/intel/composer_xe_2013_sp1.0.080/compiler/lib/intel64:/opt/intel/composer_xe_2013_sp1.0.080/mkl/lib/intel64

当我将该source行放入我的终端~/.bashrc并打开一个新终端时,两个变量都已正确设置,如上所示。现在,我从 中删除该source~/.bashrc并将其放入 中/etc/profile.d/intelCC.sh,保存并注销/登录。

登录后,没有设置任何变量,但我的~/.xsession-errors说法有错误消息:

/usr/sbin/lightdm-session: 1: /etc/profile.d/intelCC.sh: source: not found

现在我source用一个简单的替换.,这样/etc/profile.d/intelCC.sh包含现在

. /opt/intel/composer_xe_2013_sp1.0.080/mkl/bin/mklvars.sh intel64

再次相同:保存、注销并登录。现在似乎没有.xsession-errors与此相关的错误,最后:

echo $MKLROOT
# /opt/intel/composer_xe_2013_sp1.0.080/mkl

echo $LD_LIBRARY_PATH
# empty

答案1

确认 MKL_TARGET_ARCH 已设置

当您将其添加到/etc/profile.d目录时,变量可能$MKL_TARGET_ARCH尚未设置或尚未设置,因此if/else基本上会跳过整个块。

您可以通过暂时设置该语句$MKL_TARGET_ARCH上方的内容来测试该理论if/else,然后尝试再次登录以查看其是否有效。

MKL_TARGET_ARCH="..something.."
if [ -z "${MKL_TARGET_ARCH}" ] ; then

安装英特尔编译器

我没有这个编译器,因此无法向您提供确切的详细信息,但我在 15 年的大部分时间里一直致力于安装工程应用程序,因此我对这个领域有一定的了解。

无论如何,当您安装这些类型的工具时,您通常必须创建自己的环境文件,或者提供一个环境文件。我发现这篇关于英特尔 Fortran 编译器的文章,但如果产品如此不同,我会感到惊讶。

如果您浏览这篇文章,您会注意到安装 ( install.sh) 后的一个步骤,其中将文件复制到/etc/profile.d.该文件包含需要进行的环境设置。

cp /opt/intel/Compiler/11.1/056/bin/ia32/iccvars_ia32.sh /etc/profile.d/

我怀疑该产品也需要执行类似的步骤。仔细检查您的安装是否已使用此页面中的发行版特定步骤完成:

最终解决方案

如果.有效但source无效,那么您可能正在处理 Bourne shell 而不是 Bash。 Bash 支持两者,而 Bourne shell ( /bin/sh) 则不支持。

如果你看一下在本文件中然后你会发现这似乎正是你的问题所在。

Ubuntu 12.0x 将 /bin/sh 的链接从 /bin/bash 更改为 /bin/dash。 13.0.0.079 的英特尔安装脚本参考 /bin/sh 但假设/要求这是 bourne 或 bash(sh 或 bash),但不是与破折号兼容。

相关内容