完美解决 error while loading shared libraries: libXXX :cannot open shared object file: No such file o...

  • 环境: ubuntu 18.04

    • 具体案例:
    $ ./glcapsviewer
    
    ./glcapsviewer: error while loading shared libraries: libGLEW.so.1.13: cannot open shared object file: No such file or directory
    
    • 原因:
      缺少libGLEW.so.1.13

    • 尝试方案一:

    $sudo apt-cache search libGLEW
    
    glew-utils - OpenGL Extension Wrangler - utilities
    libglew-dev - OpenGL Extension Wrangler - development environment
    libglew2.0 - OpenGL Extension Wrangler - runtime environment
    libglewmx-dev - OpenGL Extension Wrangler MX - development environment
    libglewmx1.13 - OpenGL Extension Wrangler (Multiple Rendering Contexts)
    

    将search到的几个库通过apt install 全部安装,问题仍未解决

    • 尝试方案二:
      查找/目录下,name为libGLEW.so.1.13*(libGLEW.so.1.13后的*号是匹配规则,防止文件实际命名为libGLEW.so.1.13.0的情况),类型为f的文件。如果查找到文件,那么我们可以通过配置环境变量的方式,使运行./glcapsviewer时找到libGLEW.so.1.13。因为如果库安装到/usr/lib目录下,系统在运行时会自动查找此目录下的文件,如果没有安装到/usr/lib目录下,需自己手动配置环境变量

    sudo find / -name libGLEW.so.1.13* -type f

    查找后并未发现libGLEW.so.1.13*,说明通过方案一,并未安装我们想要的文件

    • 尝试方案三:
    $ dpkg -S libGLEW.so
    
    libglew2.0:amd64: /usr/lib/x86_64-linux-gnu/libGLEW.so.2.0
    libglew2.0:amd64: /usr/lib/x86_64-linux-gnu/libGLEW.so.2.0.0
    

    查找到libGLEW.so.2.0, 说明在方案一中我们安装的是libGLEW.so.2.0而不是libGLEW.so.1.13,那我么只需找到1.13版自行安装即可

    • 最终解决方案
      这里下载glew1.13版本的源文件,自行编译安装,结果执行make时报错,提示缺少什么东西,忘记了,没记载。

    然后还是在这个连接所在的页面最后,README.txt中写道,可以使用pre-generated (unsupported) snapshot版本来安装,点击连接跳转到下载页面,找到我们所需要的1.13版本,下载后顺利编译安装。

    验证是否已安装libGLEW.so.1.13*

    $ sudo find / -name libGLEW.so.1.13* -type f
    /usr/lib64/libGLEW.so.1.13.0
    

    结果查找到libGLEW.so.1.13.0, 说明我们已正确安装。此时运行./glcapsviewer仍然报相同的错误,怀疑是环境变量未配置,在~/.profile中最后一行增加export PATH="/usr/lib64:$PATH"来配置环境变量。

    再次运行./glcapsviewer还是报相同的错误,网上搜索得到答案:
    将so库所在的目录/usr/lib64写入到/etc/ld.so.conf中,然后执行sudo ldconfig,至此glcapsviewer可以完美运行!

    /etc/ld.so.conf的作用:
    /etc/ld.so.conf.d/*目录下的文件和/etc/ld.so.conf记录了动态链接库的路径,系统默认搜索/lib/usr/lib,在其他路径下的库文件就需在这些文件中指定。或者,还有个方法,就是设置LD_LIBRARY_PATH环境变量(可以设置到~/.bashrc~/.bash_profile,设置到/etc/profile下无效,至少在ubuntu18.04下是这样),添加其他路径,多个 中间用:分隔开

    原文作者:CavalryLin
    原文地址: https://www.jianshu.com/p/fa83a15949b8
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞