一些背景知识:我使用的是嵌入式板(SolidRun Cubox-i4 Pro),并使用从 SolidRun 社区论坛获得的图像在其上安装了 Ubuntu 14.04。
这个特定的板有一个 Vivante GC2000 图形驱动程序,宣传 OpenCL 支持。然而,事实证明 GPU 驱动程序很麻烦。我找到了所有必需库的二进制文件,但是当我尝试运行针对它们构建的小型测试可执行文件时,我遇到了这个熟悉的错误:
cubox@cubox:~/cltest$ g++ cltest.cpp -lOpenCL -lGAL
cubox@cubox:~/cltest$ ./a.out
./a.out: error while loading shared libraries: libOpenCL.so: cannot open shared object file: No such file or directory
所以我仔细检查了库的路径:
cubox@cubox:~/cltest$ ls /usr/lib/libOpenCL*
/usr/lib/libOpenCL.so
我仔细检查了我的 LD_LIBRARY_PATH
变量:
cubox@cubox:~/cltest$ echo $LD_LIBRARY_PATH
/usr/lib
好吧,很明显问题不是它找不到库,而是存在某种不兼容,并且错误具有误导性(我以前见过这个)。所以我试试这个:
cubox@cubox:~/cltest$ file /usr/lib/libOpenCL.so
/usr/lib/libOpenCL.so: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, not stripped
...并将其与我刚刚编译的内容进行比较:
cubox@cubox:~/cltest$ file a.out
a.out: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=fcd06f947198f92f43f364874fcef66a6303e7b4, not stripped
它们看起来很相似,只是其中提到了 for GNU/Linux 2.6.32
。然后我想起驱动程序附带了一些预编译的测试应用程序,所以我运行了其中一个:
cubox@cubox:/opt/viv_samples/cl11/fft$ ./fft
-bash: ./fft: No such file or directory
...并检查了它的文件
信息:
cubox@cubox:/opt/viv_samples/cl11/fft$ file fft
fft: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.31, stripped
因此,一个适用于 GNU/Linux 2.6.32
,另一个适用于 GNU/Linux 2.6.31
。
问题:
- 这就是为什么什么都不会执行或“查找”库的原因吗?
- 如果是,我有哪些选择?我可以强制他们以某种方式运行吗?
- 我可以运行其他命令来了解有关这些库的更多信息吗?
编辑以回应答案:
ldd输出:
cubox@cubox:~/cltest$ ldd a.out
libOpenCL.so => not found
libGAL.so => not found
libstdc++.so.6 => /usr/lib/arm-linux-gnueabihf/libstdc++.so.6 (0x76ea1000)
libgcc_s.so.1 => /lib/arm-linux-gnueabihf/libgcc_s.so.1 (0x76e80000)
libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0x76d99000)
libm.so.6 => /lib/arm-linux-gnueabihf/libm.so.6 (0x76d2c000)
/lib/ld-linux-armhf.so.3 (0x76f5f000)
可执行权限已经正确(-rwxrwxr-x
用于我的,-rwxr-xr-x
用于 fft 应用程序)。
最佳答案
在您的可执行文件上运行 ldd 以检查它想要引入哪些共享库。
此外,要运行一个程序,它需要在许可中设置一个可执行位
$ ls -la fft
$ chmod a+x fft ./fft
关于c++ - "No such file or directory"链接器错误,LD_LIBRARY_PATH 设置正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27021606/