ls: libc.so.6: version `GLIBC_2.28’ not found (required by ls)–linux系统下文件夹中有libc.so.6文件

ls出现报错

因为当前文件夹下面存在libc.so.6文件,并且版本低于当前系统libc的版本,因为LD_LIBRARY_PATH设置有问题。

image-20230315133739529

libc调用顺序

  1. 缓存搜索:系统首先会查找之前运行过的程序的缓存,如果之前已经加载了libc库,那么会直接使用缓存中的libc库。
  2. 程序指定的动态链接库搜索路径:程序可以通过调用ldconfig或者设置LD_LIBRARY_PATH环境变量来指定动态链接库搜索路径,这些路径会被系统搜索。
  3. 系统默认搜索路径:如果以上步骤都没有找到libc库,那么系统会按照默认的搜索路径进行搜索,这些路径通常包括/lib、/usr/lib、/usr/local/lib等目录。
  4. 内建的默认搜索路径:如果系统仍然没有找到libc库,那么系统会搜索内建的默认搜索路径,这些路径通常包括/usr/lib64和/lib64等目录。

报错原因及解决办法

因为我的环境中设置了arm环境的libc,然后添加的时候设置错误,多添加了一个冒号,于是就会出现这种问题,删掉那个多余的冒号即可。或者重新指定一下连接库

  • 临时指定

    1
    export LD_LIBRARY_PATH=/usr/lib
  • 永久更改

    1
    2
    3
    4
    5
    sed -i  export 'LD_LIBRARY_PATH=/usr/lib:$LD_LIBRARY_PATH'   ~/.bashrc 
    //如果是zsh就是
    sed -i export 'LD_LIBRARY_PATH=/usr/lib:$LD_LIBRARY_PATH' ~/.zshrc
    //最后source更新一下
    source ~/.zshrc

image-20230315134245039