2017-08-27 7 views
2

私はインテルコンパイラを次のようにインストールします$HOME/tpl/intel./a.out: error while loading shared libraries: libiomp5.so: cannot open shared object file: No such file or directory:私は、OpenMPによる単純なhello_omp.cpp明示的にリンクするintel icpc 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でコンパイルするが、私が実行したときに、私は次のエラーを取得するを有効にしてコンパイルするとき。

LD_LIBRARY_PATHを使用せずに、makeプロセス中にインテルコンパイラと適切なライブラリを明示的にリンクしたいとしますか?

+0

私は、 'ld'の' -rpath = dir'を使って余分なライブラリ検索パスを実行ファイルに焼くことができると思います。私は確信が持てないので、答えとして投稿しない。あるいは、 '/ etc/ld.so.conf.d/something.conf'にパスを追加し、' ldconfig'を実行して、icpcのライブラリディレクトリをシステムライブラリのsearch-pathsに追加することができます。そういう意味では 'ldconfig'も使います。 –

答えて

1

あなたは、あなたの問題のために2つのシンプルなソリューションがあります。

  1. インテルランタイム・ライブラリと静的にリンクする:
    ~/tpl/intel/bin/icpc -O3 -qopenmp -static_intel hello_omp.cpp
    • 長所:インテルの実行あなたは気にする必要はありませんがバイナリを実行しているマシンにインストールされているか、まったくインストールされていなくてもかまいません。
    • 短所:バイナリが大きくなり、利用可能な場合でも別の(より最近の理想的な)ランタイム環境を選択できなくなります。
      ~/tpl/intel/bin/icpc -O3 -qopenmp -Wl,-rpath=$HOME/tpl/intel/lib/intel64 hello_omp.cpp
      注意リンカーにオプションを送信する-Wl,の使用:リンカオプション-rpathを使用してバイナリに動的ライブラリの検索パスを追加

  2. 私が提案した最初の解決策よりも、あなたの後ろのものに似ていると思いますので、私はあなたに賛否両論があなたのものであるかを考案させてください。
+0

オプション1が動作します。 2番目のオプションを使用すると、私はまだ同じエラーを受け取ります './a.out:共有ライブラリの読み込み中にエラーが発生しました:libiomp5.so:共有オブジェクトファイルを開くことができません:そのようなファイルやディレクトリはありません ' – kirikoumath

+1

iomp5ライブラリへの実際のパスはあなたがそれを調整する必要があるかもしれないので、私が置いたものと異なってください。さらに、 '〜'記号がこの文脈ではうまく動作しないので、それを対応するフルパスで置き換える必要があるかもしれません。それがうまくいくはずです。 – Gilles

+0

'-rpath'には絶対パスが必要です。ですから、 '-rpath = $ HOME/tpl/intel/lib/intel64'が私のために働いていました。手伝ってくれてどうもありがとう。 – kirikoumath

0

インテルソースのbinディレクトリにコンパイラ船compilervars.shスクリプトが短い(ホストOpenMPランタイム・ライブラリーとlibsvmlのような他のコンパイラ固有のライブラリ右ディレクトリとLD_LIBRARY_PATH、LIBRARY_PATHおよびPATHなどの適切なENV変数を設定しますベクトル数学ライブラリ)またはlibimf(より最適化されたバージョンのlibm)です。

関連する問題