zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    (TOJ1004)渊子赛马
    (TOJ1063)养兔子
    (TOJ3260)Palindromes
    (TOJ1070)Least Common Multiple
    (TOJ1215)数据结构练习题——合并表
    (TOJ1481)C语言实验题——鞍点
    (TOJ1496)C语言实验题——字符过滤
    (TOJ1003)1、2、3、4、5...
    (TOJ1490)C语言实验题——合法的C标识符
    (TOJ2804)Even? Odd?
  • 原文地址:https://www.cnblogs.com/jhc888007/p/9400450.html
Copyright © 2011-2022 走看看