/usr/bin/ld cannot find lopencl的解决方案

详情

使用make命令时发现报错: “ld cannot find lOpenCL" ,详细信息如下所示。

/usr/bin/ld: cannot find -lOpenCL
collect2: error: ld returned 1 exit status
make[1]: *** [Makefile:20: DeviceInfo] Error 1

原因

如果 gcc 或 g++ 在编译过程中报错 cannot find -l<nameOfTheLibrary>,那么它实际上是在寻找名为 lib{nameOfTheLibrary}.so 的共享库文件,但是在默认情况下,它无法在共享库搜索路径中找到该文件。这些默认搜索路径包括 /lib/usr/lib 以及由 /etc/ld.so.conf 指定的路径。如果设置了环境变量 LD_LIBRARY_PATH,那么该变量中列出的目录也将成为搜索路径。

解决方案

解决方法是为该库创建一个符号链接,将其链接到一个已知的库位置 ,例如:

sudo ln -s /usr/lib/x86_64-linux-gnu/libOpenCL.so.1 /usr/lib/libOpenCL.so

或者,可以使用环境变量 LD_LIBRARY_PATH 来实现这一目的,或者编辑 /etc/ld.so.conf.d/myapp.conf,然后运行命令 ldconfig 来更新库路径。

在此之前可使用locate或find命令去寻找so文件的位置,如:

root@ubuntu:/home/j/Desktop# locate libOpenCL.so
/usr/lib/x86_64-linux-gnu/libOpenCL.so.1
/usr/lib/x86_64-linux-gnu/libOpenCL.so.1.0.0
/usr/share/man/man7/libOpenCL.so.7.gz
root@ubuntu:/home/j/Desktop# find / -name 'libOpenCL.so*'
/usr/lib/x86_64-linux-gnu/libOpenCL.so.1
/usr/lib/x86_64-linux-gnu/libOpenCL.so.1.0.0
/usr/lib/x86_64-linux-gnu/libOpenCL.so
/usr/share/man/man7/libOpenCL.so.7.gz
find: ‘/run/user/1000/doc’: Permission denied
find: ‘/run/user/1000/gvfs’: Permission denied
root@ubuntu:/home/j/Desktop#

找到之后便可以安装了。

猜你喜欢

转载自blog.csdn.net/qq_42458954/article/details/134682275