libGLEW.so.1.9:无法打开共享对象文件
问题描述:
我是新来的C++,并有我的新项目一个问题,我不明白。
我的程序的相关部分:libGLEW.so.1.9:无法打开共享对象文件
#include <glew.h>
#include <SDL.h>
#include <SDL_opengl.h>
int initGlew()
{
if(glewInit()!=GLEW_OK)
{
printf("Unable to init glew!");
return 1;
}
return 0;
}
但我对代码块运行,有以下运行时错误:
home/samuel/Dokumente/ProjekteC++/GameGL/bin/Debug/GameGL: error while loading shared libraries: libGLEW.so.1.9: cannot open shared object file: No such file or directory
在构建选项我与这些所谓文件:
- ../../../../../usr/local/lib/SDL
- ../../../../../usr/ local/lib64/libGLEW.so 个
- ../../../../../usr/local/lib64/libGLEW.so.1.9
我搜索了很多,其中的误差可能,但并未发现任何东西。我希望你能帮助我。
答
错误是说它在运行时找不到动态库。当您编译应用程序时,您链接到静态库(.a文件),但在运行时,您可以动态加载.so文件,这就是发生在这里的情况。
如果你列出你的应用程序库的依赖,你可能会看到,它无法找到libGLEW。您可以使用ldd命令在命令行上执行此操作。
$ ldd <your_file>
linux-vdso.so.1 => (0x00007fff769ff000)
libGLEW.so.1.9 => not found
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2af9e28000)
/lib64/ld-linux-x86-64.so.2 (0x00007f2afa208000)
将目录添加到您的库搜索路径是通过LD_LIBRARY_PATH导出完成的。再次,你可以在命令行上这样做。
$LD_LIBRARY_PATH=/usr/lib64 ldd <your_file>
linux-vdso.so.1 => (0x00007fff2e053000)
libGLEW.so.1.9 => /usr/lib64/libGLEW.so.1.9 (0x00007f4071ca5000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f40718c7000)
libGL.so.1 => /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 (0x00007f4071660000)
...
然后,您可以通过省略ldd命令来运行您的应用程序。我不确定如何在代码块中实现这一功能,但我假设您可以在运行/调试设置中的某处设置您的调试环境配置。
感谢
答
使用环境变量LD_LIBRARY_PATH是用于临时的测试解决方案。相反,如果在Linux上投入相同的路径到系统级的配置文件:
/etc/ld.so.conf
,如:
cat /etc/ld.so.conf
/usr/lib64
再搞这个变化问题:
sudo ldconfig