2013-03-07 56 views
2

我是新来的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

我搜索了很多,其中的误差可能,但并未发现任何东西。我希望你能帮助我。

回答

2

错误是说它在运行时找不到动态库。当您编译应用程序时,您链接到静态库(.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命令来运行您的应用程序。我不确定如何在代码块中实现这一功能,但我假设您可以在运行/调试设置中的某处设置您的调试环境配置。

感谢

3

使用环境变量LD_LIBRARY_PATH是用于临时的测试解决方案。相反,如果在Linux上投入相同的路径到系统级的配置文件:

/etc/ld.so.conf 

,如:

cat /etc/ld.so.conf 

/usr/lib64 

再搞这个变化问题:

sudo ldconfig 
相关问题