3

C++コードでOpenMPを使用しています。

libgomp.so.1は私のlibフォルダーにあります。LD_LIBRARY_PATHにもパスを追加しました

それでも実行時にエラーメッセージが表示されます:libgomp.so.1:共有オブジェクトファイルを開くことができません

コンパイル時に、-fopenmpオプションを使用してコードをコンパイルします。

何が問題を引き起こす可能性があるのか​​考えていますか?

ありがとう

4

1 に答える 1

3

プログラムに静的リンクを使用します。あなたの場合、それは を使用することを意味し、必要に応じて関連するおよびライブラリ-fopenmp -staticへのフルパスを指定します。librt.alibgomp.a

静的リンクは、プログラムを実行するために必要なすべてのコードをバイナリと一緒にパッケージ化するだけなので、これで問題が解決します。したがって、ターゲット システムは動的ライブラリを検索する必要はなく、それらがターゲット システムに存在するかどうかも問題ではありません。

静的リンクは奇跡的な治療法ではないことに注意してください。奇妙なハードウェアエミュレーターに関する特定の問題については、良いアプローチになるはずです。ただし、一般に、静的リンクには (少なくとも) 2 つの欠点があります。

  • バイナリサイズ。すべての KDE プログラムを静的にリンクした場合を想像してみてください。つまり、共有ライブラリを使用した場合は 1 つしか持てなかったのに、基本的にシステム上にすべての KDE/QT ライブラリの数百のコピーが存在することになります。
  • パスを更新します。人々が図書館でセキュリティ上の問題を発見したとしますx。共有ライブラリでは、パッチが利用可能になったらライブラリを更新するだけで十分です。すべてのアプリケーションが静的にリンクされている場合、これらすべての開発者がアプリケーションを再リンクして再リリースするまで待つ必要があります。
于 2013-02-02T13:19:40.837 に答える