2013-03-07 57 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 
相關問題