現在、OpenCLで指定された単純なプログラムを this Webサイトからコンパイルしようとしています。必要な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
this websiteの指示に従ってインストールしました。しかし、私はまだ上記のエラーを取得します。
このエラーを解決するにはどうすればよいですか?
リンカがOpenCL
ライブラリを見つけることができません。
リンカがOpenCL
ライブラリを見つけるのを助ける必要があります。
同様の問題が発生しました here
解決策は、既知のライブラリの場所へのライブラリのリンクを作成することでした:
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
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
を使用している場合は、コンパイラ/リンカーコマンドをこのように変更するだけです。それ以外の場合は、ビルドシステムに含める方法を変更する必要があります。