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

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

我正在尝试编译一个 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

回显$路径:

/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

答案1

您需要指示您的系统在哪里可以找到动态库。系统范围的目录/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 中有关共享库的章节可能有额外的帮助。

答案2

更新

刚刚注意到超级用户评论。您仍然可以在不成为 root 的情况下尝试 link 命令。该文件夹的权限有可能仍然允许您。如果失败,则您需要联系系统管理员寻求帮助。


当应用程序正在查找库时,符号链接不存在。

试试这个(root时):

ln -sf /home/mks/myGL/oglpg/lib/libGLEW.so.1.11.0 /usr/lib64/libGLEW.so.1.11

之后ldd ./triangle再次运行并查看输出是否找到符号链接。如果它不查看位置,它将查找其他符号链接并在那里创建链接。如果该位置不是/usr/lib64,请确保unlink /usr/lib64/libGLEW.so.1.11在更正符号链接位置后,以免在文件系统上留下未使用的符号链接并忘记稍后清理它。

=> 创建链接

顺丰=> 符号链接,强制

相关内容