显式 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 个简单的解决方案:
- 与 Intel 运行 时间库静态链接:
~/tpl/intel/bin/icpc -O3 -qopenmp -static_intel hello_omp.cpp
- 优点:您不必关心英特尔 运行 时间环境在您 运行 二进制文件所在的计算机上的安装位置,甚至不需要完全安装它;
- 缺点:您的二进制文件变得更大并且不允许 select 不同的(理想情况下是最近的)运行 时间环境,即使它可用。
- 使用链接器选项将动态库的搜索路径添加到二进制文件中
-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 版本)。
我在下面$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 个简单的解决方案:
- 与 Intel 运行 时间库静态链接:
~/tpl/intel/bin/icpc -O3 -qopenmp -static_intel hello_omp.cpp
- 优点:您不必关心英特尔 运行 时间环境在您 运行 二进制文件所在的计算机上的安装位置,甚至不需要完全安装它;
- 缺点:您的二进制文件变得更大并且不允许 select 不同的(理想情况下是最近的)运行 时间环境,即使它可用。
- 使用链接器选项将动态库的搜索路径添加到二进制文件中
-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 版本)。