2017-08-27 50 views
2

我在以下的$HOME/tpl/intel安装intel编译器。当我编译一个简单的hello_omp.cpp使用OpenMP启用明确链接intel icp 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

我想在制作过程中明确链接intel编译器和相应的库,而不使用LD_LIBRARY_PATH

+0

我想你可以用'ld'的'-rpath = dir'将一个额外的库搜索路径烧入你的可执行文件中。不张贴作为答案,因为我不确定。或者你可以添加路径到'/etc/ld.so.conf.d/thing.conf'并运行'ldconfig'来将icpc的库目录添加到你的系统库搜索路径中,如果你在Linux系统上或者那种也使用'ldconfig'的方式。 –

回答

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,传输选项链接。
    我想这更像你之后所提出的第一个解决方案,所以我让你比较一下你的优点和缺点。
+0

选项1有效。使用第二个选项,我仍然得到相同的错误 './a.out:加载共享库时出错:libiomp5.so:无法打开共享对象文件:没有这样的文件或目录' – kirikoumath

+1

iomp5库的实际路径可能与我放置的不同,因此您可能需要对其进行调整。此外,我不确定'〜'符号在这种情况下会起作用,因此您可能需要将其替换为相应的完整路径。只是试验一下,因为它应该工作。 – Gilles

+0

'-rpath'需要绝对路径。所以'-rpath = $ HOME/tpl/intel/lib/intel64'为我工作。非常感谢你的帮助。 – kirikoumath

0

英特尔编译器船舶compilervars.sh其来源将设置像LD_LIBRARY_PATH,LIBRARY_PATH和路径以正确的目录的主机OpenMP运行时库和像libsvml其他编译器特定的库相应的ENV变量时的bin目录脚本(短矢量数学库)或libimf(更优化的libm版本)。