目前正在尝试编译一个用 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
则可以像这样简单地修改编译器/链接器命令。否则,您将不得不修改您的构建系统以将其包含进去。