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

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

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

相关内容