Libraries

libGLEW.so.1.11:無法打開共享對象文件

  • November 3, 2014

我正在嘗試編譯一個opengl程序,結果是:

載入共享庫時出錯:libGLEW.so.1.11:無法打開共享對象文件:沒有這樣的文件或目錄

編譯:

g++ -o triangle triangle.cpp LoadShaders.cpp -I/home/mks/myGL/oglpg/include/ -L/home/mks/myGL/oglpg/lib  -L/usr/lib64 -lglut -lGL -lGLU -lGLEW

在 /home/mks/myGL/oglpg/lib 中有所有庫:

libGLEW.so       libGLEW.so.1.11.0  
libGLEW.a    libGLEW.so.1.11  

(我不是超級使用者,所以我在上面的文件夾中安裝了 glew )

如果我做:

ldd ./triangle | grep "GLEW"
       libGLEW.so.1.11 => not found
  • 更新 - -

編譯:

g++ -o triangle triangle.cpp LoadShaders.cpp -I/home/mks/myGL/oglpg/include/ -L/home/mks/myGL/oglpg/lib -L/usr/lib64 -lglut -lGL -lGLU -lGLEW

ldd ./三角形:

linux-vdso.so.1 =>  
       libglut.so.3 => /usr/lib64/libglut.so.3 
       libGL.so.1 => /usr/lib64/nvidia/libGL.so.1 
       libGLU.so.1 => /usr/lib64/libGLU.so.1 
       libGLEW.so.1.11 => not found
       libstdc++.so.6 => /usr/lib64/libstdc++.so.6 
       libm.so.6 => /lib64/libm.so.6
       libgcc_s.so.1 => /lib64/libgcc_s.so.1 
       libc.so.6 => /lib64/libc.so.6 
       libXext.so.6 => /usr/lib64/libXext.so.6 
       libX11.so.6 => /usr/lib64/libX11.so.6
       libXxf86vm.so.1 => /usr/lib64/libXxf86vm.so.1 
       libXi.so.6 => /usr/lib64/libXi.so.6 
       libnvidia-tls.so.340.29 => /usr/lib64/nvidia/tls/libnvidia-tls.so.340.29 
       libnvidia-glcore.so.340.29 => /usr/lib64/nvidia/libnvidia-glcore.so.340.29 
       libdl.so.2 => /lib64/libdl.so.2 
       /lib64/ld-linux-x86-64.so.2
       libxcb.so.1 => /usr/lib64/libxcb.so.1 
       libXau.so.6 => /usr/lib64/libXau.so.6 

ls -al /home/mks/myGL/oglpg/lib :

drwxr-xr-x.  .
drwxr-xr-x.  ..
-rw-r--r--.  freeglut_static.lib
-rw-r--r--.  freeglut_static_vs2010_d.lib
-rw-r--r--.  freeglut_static_vs2010.lib
-rw-r--r--.  gl3w.c
-rw-r--r--.  glew_static_d.lib
-rw-r--r--.  glew_static_vs2010_d.lib
-rw-r--r--.  glew_static_vs2010.lib
-rw-r--r--.  libfreeglut.a
-rw-r--r--.  libglew32.a
-rw-r--r--.  libGLEW.a
lrwxrwxrwx.  libGLEW.so -> libGLEW.so.1.11.0
lrwxrwxrwx.  libGLEW.so.1.11 -> libGLEW.so.1.11.0
-rw-r--r--.  libGLEW.so.1.11.0
-rw-r--r--.  LoadShaders.cpp
-rw-r--r--.  targa.cpp
-rw-r--r--.  vbm.cpp
-rw-r--r--.  vermilion32_d.lib
-rw-r--r--.  vermilion32.lib
-rw-r--r--.  vermilion64_d.lib
-rw-r--r--.  vermilion64.lib

迴聲 $PATH:

/usr/local/cuda-6.0/bin:/home/mks/bin:/usr/local/cuda-6.0/bin:/usr/lib64/:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin

您需要指示您的系統在哪裡可以找到動態庫。系統範圍的目錄就像/usr/lib是在動態庫的預設搜尋路徑中,但是如果你想添加自定義目錄,你需要通過在環境變數中列出它們來聲明它們LD_LIBRARY_PATH。這是一個以冒號分隔的目錄列表,例如PATH.

export LD_LIBRARY_PATH=/home/mks/myGL/oglpg/lib

將此行放在~/.profile您定義環境變數的地方或任何地方。您也可以在 shell 中執行它,它將適用於從該 shell 啟動的所有程序。

或者,當您使用該庫建構程序時,請在您的系統上註冊它的位置。

g++ -Wl,-rpath,/home/mks/myGL/oglpg/lib … -L /home/mks/myGL/oglpg/lib -lGLEW

Program Library Howto 中關於共享庫的章節可能會有所幫助。

引用自:https://unix.stackexchange.com/questions/165680