/usr/bin/ld: 找不到 -lOpenCL

/usr/bin/ld: 找不到 -lOpenCL

目前正在嘗試編譯 OpenCL 中給出的一個簡單程序網站。它會給我DeviceInfo我需要的東西。簡單地呼叫 a 後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/您也可以將庫資料夾新增至 Libraries 路徑:

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您可以像這樣簡單地修改編譯器/連結器命令。否則你將不得不接觸你的建置系統如何包含它。

相關內容