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


10

当前正在尝试从网站编译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

现在,我已按照网站上的说明进行安装。但是,我仍然得到上面的错误。

我该如何解决这个错误?

Answers:


14

您的链接器找不到该OpenCL库。

您应该帮助链接程序找到OpenCL库。

这里提出类似的问题

那里的解决方案是为库建立一个到已知lib位置的链接:

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

1
这对我有用!第一个答案。谢谢!
莎朗·杜吉拉拉

3

正如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,则可以像这样简单地修改编译器/链接器命令。否则,您将不得不触摸构建系统如何包括它。


或尝试LDFLAGS例如make 'LDFLAGS=-L/usr/lib/x86_64-linux-gnu'
steeldriver

如果您正在寻找纯粹的临时解决方案,这也可以解决问题。但是我建议LDFLAGS=$LDFLAGS:/usr/lib/x86_64-linux-gnu/保留所有以前的设置
mbeyss
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.