3

我是 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文件的构建选项中:

  • ../../../../../usr/local/lib/SDL
  • ../../../../../usr/local/lib64/libGLEW.so
  • ../../../../../usr/local/lib64/libGLEW.so.1.9

我搜索了很多可能出现错误的地方,但没有找到任何东西。我希望你能帮助我。

4

2 回答 2

4

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

/etc/ld.so.conf

喜欢 :

cat /etc/ld.so.conf

/usr/lib64

然后参与此更改问题:

sudo ldconfig
于 2013-10-28T19:26:44.520 回答
3

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

谢谢

于 2013-03-12T23:40:35.770 回答