【问题标题】:explicitly link intel icpc openmp显式链接英特尔 icpc openmp
【发布时间】:2017-08-27 21:49:14
【问题描述】:

我在以下$HOME/tpl/intel 安装了英特尔编译器。当我在启用 openMP 的情况下编译一个简单的 hello_omp.cpp

#include <omp.h>
#include <iostream>

int main ()
{
#pragma omp parallel

    {
        std::cout << "Hello World" << std::endl;
    }
    return 0;
}

我使用~/tpl/intel/bin/icpc -O3 -qopenmp hello_omp.cpp 编译,但运行时出现以下错误: ./a.out: error while loading shared libraries: libiomp5.so: cannot open shared object file: No such file or directory.

我想在制作过程中显式链接英特尔编译器和相应的库,而不使用LD_LIBRARY_PATH

【问题讨论】:

  • 我认为您可以使用ld-rpath=dir 将额外的库搜索路径烘焙到您的可执行文件中。不发布作为答案,因为我不确定。或者你可以添加/etc/ld.so.conf.d/something.conf 的路径并运行ldconfig 以将icpc 的库目录添加到你的系统库搜索路径,如果你在Linux 系统上或同样使用ldconfig 的系统上。跨度>

标签: c++ openmp intel icc scientific-computing


【解决方案1】:

您的问题有 2 个简单的解决方案:

  1. 与英特尔运行时库静态链接:
    ~/tpl/intel/bin/icpc -O3 -qopenmp -static_intel hello_omp.cpp
    • 优点:您不必关心英特尔运行时环境安装在运行二进制文件的机器上的什么位置,甚至完全安装它;
    • 缺点:您的二进制文件变得更大,并且即使可用,也不允许选择其他(最好是最近的)运行时环境。
  2. 使用链接器选项将动态库的搜索路径添加到二进制文件中-rpath:
    ~/tpl/intel/bin/icpc -O3 -qopenmp -Wl,-rpath=$HOME/tpl/intel/lib/intel64 hello_omp.cpp
    请注意使用-Wl, 将选项传输到链接器。
    我想这比我提出的第一个解决方案更像你所追求的,所以我让你设计比较适合你的利弊。

【讨论】:

  • 选项 1 有效。使用第二个选项,我仍然得到同样的错误./a.out: error while loading shared libraries: libiomp5.so: cannot open shared object file: No such file or directory
  • iomp5 库的实际路径可能与我输入的不同,因此您可能需要对其进行调整。此外,我不确定 ~ 符号在这种情况下是否有效,因此您可能需要将其替换为相应的完整路径。只需尝试一下,它应该可以工作。
  • -rpath 需要绝对路径。所以-rpath=$HOME/tpl/intel/lib/intel64 为我工作。非常感谢您的帮助。
【解决方案2】:

英特尔编译器在 bin 目录中提供 compilervars.sh 脚本,当获取该脚本时,该脚本将设置适当的环境变量,如 LD_LIBRARY_PATH、LIBRARY_PATH 和 PATH,其中包含托管 OpenMP 运行时库和其他编译器特定库,如 libsvml(短向量数学库) 或 libimf(更优化的 libm 版本)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多