libGLEW.so.1.9:无法打开共享对象文件

时间:2013-03-07 20:35:36

标签: shared-libraries glew

我是c ++的新手,在我的新项目中遇到了一个我不明白的问题 我的计划的相关部分是:

    #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

在构建选项中,我链接到这些so-files:

  • ../../../../../ USR /本地/ LIB / SDL
  • ../../../../../ USR /本地/ lib64下/ libGLEW.so
  • ../../../../../ USR /本地/ lib64下/ libGLEW.so.1.9

我搜索了很多错误,但没有发现任何错误。我希望你能帮助我。

2 个答案:

答案 0 :(得分:3)

使用环境变量LD_LIBRARY_PATH旨在用于临时的仅测试解决方案。相反,如果在linux上将相同的路径放入系统范围的配置文件中:

/etc/ld.so.conf

喜欢:

cat /etc/ld.so.conf

/usr/lib64

然后参与此更改问题:

sudo ldconfig

答案 1 :(得分: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命令来运行您的应用程序。我不确定如何在codeblocks中使用它,但我假设您可以在Run / Debug设置中的某处设置调试环境配置。

由于