how-to-update-glib-without-sudo

如何解决glib.so.6 - Not Found问题(不用sudo提权)

最近在帮室友安装一个python包时,安装完后import出现类似/usr/glib.so.6: version 'GLIB_2.14' not found的问题。

本文是对https://github.com/materialsproject/pymatgen/issues/1172的一个总结

出现原因:服务器上的glib库版本太旧,不能支持2.14版本,可以通过下列命令查看自己的glib版本:strings /lib/libc.so.6 | grep GLIBC

解决方案:

  • 首先尝试卸载包后重新安装(基本无效);

  • 如果自己的用户在超级用户组中,或者直接有root权限,可以用http://www.lightofdawn.org/wiki/wiki.cgi/NewAppsOnOldGlibc中所说的weaken glib dependencies的方法,暴力的修改glib.so文件中,为其增加2.14相应的函数入口实现。这个方法理论上可行,但没有尝试过。

  • 重新下载最新版glib并编译,安装在自己的用户目录下(不用提权),介绍安装方法:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    mkdir ~/glibc_install; cd ~/glibc_install 

    wget http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz

    tar zxvf glibc-2.14.tar.gz

    cd glibc-2.14

    mkdir build

    cd build

    ../configure --prefix=/home/yourusername/glibc #此处直接安装到自己目录下,就不用特权了

    make -j4 #4是指线程数

    sudo make install

    export LD_LIBRARY_PATH=/home/yourusername/glibc/lib

    之后在python中成功import。

    可以将最后一句放在~/.bashrc中,这样以后不用每次export了

---以上---