显式链接intel icpc openmp

时间:2017-08-27 21:49:14

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

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

#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过程中明确地链接intel编译器和相应的库,而不使用LD_LIBRARY_PATH

2 个答案:

答案 0 :(得分:2)

您有两个简单的解决方案可以解决您的问题:

  1. 静态链接英特尔运行时库:
    datetime.strptime(datetime.today().strftime('%Y/%m/%d ') + '09:15', '%Y/%m/%d %H:%M')
    • 优点:您不必关心在运行二进制文件的计算机上安装英特尔运行时环境的位置,或者甚至完全安装它;
    • 缺点:您的二进制文件变得更大,并且即使在可用时也不允许选择不同的(最近理想的)运行时环境。
  2. 使用链接器选项~/tpl/intel/bin/icpc -O3 -qopenmp -static_intel hello_omp.cpp将动态库的搜索路径添加到二进制文件中:
    -rpath
    请注意使用~/tpl/intel/bin/icpc -O3 -qopenmp -Wl,-rpath=$HOME/tpl/intel/lib/intel64 hello_omp.cpp将选项传送给链接器 我想这比你提出的第一个解决方案更像你所说的,所以我让你设计一下比较优缺点。

答案 1 :(得分:0)

英特尔编译器在bin目录中发布compilervars.sh脚本,当源文件将设置适当的env变量,如LD_LIBRARY_PATH,LIBRARY_PATH和PATH,其中包含托管OpenMP运行时库和其他编译器特定库(如libsvml)的正确目录(短矢量数学库) )或libimf(更优化的libm版本)。