現在、OpenCLで与えられた簡単なプログラムをコンパイルしようとしていますこれウェブサイト。必要なものが提供されますDeviceInfo
。 を呼び出すだけでmake
、以下のエラーが発生します。
sharan@sharan-X550CC:~/opencl-ex/Ex1$ make
g++ DeviceInfo.cpp -I ../../Cpp_common -lOpenCL -o DeviceInfo
/usr/bin/ld: cannot find -lOpenCL
collect2: error: ld returned 1 exit status
Makefile:23: recipe for target 'DeviceInfo' failed
make: *** [DeviceInfo] Error 1
今私は以下の指示に従ってインストールしましたこれウェブサイト。しかし、それでも上記のエラーが発生します。
このエラーを解決するにはどうすればよいですか?
答え1
リンカーがOpenCL
ライブラリを見つけることができません。
リンカーがOpenCL
ライブラリを見つけられるように支援する必要があります。
同様の問題が提起されたここ
解決策は、ライブラリを既知のライブラリの場所にリンクすることです。
sudo ln -s /usr/lib/x86_64-linux-gnu/libOpenCL.so.1 /usr/lib/libOpenCL.so
別のオプション:
OpenCL
ライブラリが次の場所にあると仮定すると、/usr/lib/x86_64-linux-gnu/
ライブラリ パスにライブラリ フォルダーを追加することもできます。
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu/"
「ダイナミック リンカー」を更新する必要があるかもしれません:
sudo ldconfig
答え2
Yaron がすでに述べたように、リンカーは OpenCL ライブラリがどこにあるか知りません。つまり、探している場所にはどこにも存在しません。
それをそれらの場所(例えば )のいずれかに移動するのではなく、/usr/lib
フラグを介してリンカーにそれを探す場所を通知することをお勧めします-L
。コマンドは次のように読みます( に注意してください-L/usr/lib/x86_64-linux-gnu
)。
g++ DeviceInfo.cpp -I ../../Cpp_common -L/usr/lib/x86_64-linux-gnu -lOpenCL -o DeviceInfo
手書きを使用している場合は、Makefile
次のようにコンパイラ/リンカー コマンドを変更するだけです。それ以外の場合は、ビルド システムを変更して、それを組み込む方法を変更する必要があります。