web-dev-qa-db-ja.com

/ usr / bin / ld:-lOpenCLが見つかりません

現在、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の指示に従ってインストールしました。しかし、私はまだ上記のエラーを取得します。

このエラーを解決するにはどうすればよいですか?

8

リンカが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
7
Yaron

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を使用している場合は、コンパイラ/リンカーコマンドをこのように変更するだけです。それ以外の場合は、ビルドシステムに含める方法を変更する必要があります。

2
mbeyss