显式 link intel icpc openmp

explicitly link intel icpc openmp

我在下面$HOME/tpl/intel安装了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.

我想在 make 过程中显式 link 英特尔编译器和适当的库,而不使用 LD_LIBRARY_PATH?

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

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

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