2017-08-27 52 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版本)。