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