• Centos6 使用 gbdt lightgbm "libc.so.6: version `GLIBC_2.14' not found" "Segment Fault"


    • 由于系统自带的libc.so.6版本过低导致,运行:strings /lib64/libc.so.6|grep GLIBC_,结果中不包含GLIBC_2.14
    • 各种转载的更新glibc的方法不靠谱,轻则运行时"Segment Fault",重则系统崩溃
    • 查看依赖GLIBC_2.14的动态库
    python
    >>>import lightgbm
    Traceback (most recent call last):
    ...
    OSError: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /home/prefer/anaconda2/lib/python2.7/site-packages/lightgbm/lib_lightgbm.so)
    • 找到对应动态库
    cd /home/prefer/anaconda2/lib/python2.7/site-packages/lightgbm/lightgbm
    • 查找动态库对GLIBC_2.14的调用
    readelf -s lib_lightgbm.so |grep GLIBC_2.14

    readelf -V lib_lightgbm.so

    • 将动态库对GLIBC_2.14的依赖降为WEAK
    0x039cd8+0x00a0+0x4=0x39d7c
    for addr in 0x39d7c; do printf 'x02' | dd conv=notrunc of=./lib_lightgbm.so  bs=1 seek=$((addr)) ; done
    readelf -V lib_lightgbm.so

    • 自己新建lib,补充GLIBC_2.14的函数
    mkdir libc_my
    cd libc_my
    vim libc_my.c
    #include <string.h>
    void* memcpy(void *dest, const void *src, size_t n) {
            return memmove(dest, src, n);
    }
    gcc -s -shared -o libc_my.so -fPIC -fno-builtin libc_my.c
    mv libc_my.so /home/prefer/anaconda2/lib/
    • 配置环境变量,重新运行python
    export LD_LIBRARY_PATH=/home/prefer/anaconda2/lib:$LD_LIBRARY_PATH
    export LD_PRELOAD=/home/prefer/anaconda2/lib/libc_my.so
    python
    >>> import lightgbm
    • 如果还是不行,重复上述步骤

    参考文献:

    https://www.jianshu.com/p/308a4e803c81

    https://blog.csdn.net/xp5xp6/article/details/52513428

    http://www.lightofdawn.org/wiki/wiki.cgi/NewAppsOnOldGlibc

  • 相关阅读:
    .net framework v4.5.2
    sql数据库不允许保存更改和保存失败解决方法
    如何查看笔记本电脑型号
    Premiere 5.0/5 .5菜单详解
    Python编辑器英文菜单的中文翻译及解释
    SqlServer--常用数据查询
    pycharm上方菜单栏不见了如何恢复
    笔记本电脑的f1到f12怎么按
    C#的访问权限
    封装,继承和多态知识点汇总
  • 原文地址:https://www.cnblogs.com/jhc888007/p/9400450.html
Copyright © 2020-2023  润新知