为xgboost搭建环境,升级glibc,gcc,和解决升级glibc之后的中文乱码问题

来源:互联网 发布:农村 剩女 心态 知乎 编辑:程序博客网 时间:2024/05/29 06:58

一:将xgboost源码包编译好之后,在spark上运行报错:…/lib64/libc.so.6: version `GLIBC_2.14’ not found

解决办法:升级glibc,我选择的是升级到2.14

  1. 下载glibc-2.14.tar.xz:下载地址
  2. 解压:tar -xvf glibc-2.14.tar.xz
  3. 进入解压之后的目录并安装:
    [root@test hadoop]# cd glibc-2.14
    [root@test glibc-2.14]# mkdir build
    [root@test glibc-2.14]# cd build
    [root@test build]# ../configure --prefix=/opt/glibc-2.14
    [root@test build]# make&&make install

  4. 查看新安装的glibc是否有需要的 GLIBC_2.14:
    [root@test lib]# pwd
    /opt/glibc-2.14/lib
    [root@test lib]# ll | grep libc
    -rwxr-xr-x 1 root root 9711489 Dec 20 08:15 libc-2.14.so
    -rw-r--r-- 1 root root 22029786 Dec 20 08:14 libc.a
    -rwxr-xr-x 1 root root 275528 Dec 20 08:15 libcidn-2.14.so
    lrwxrwxrwx 1 root root 12 Dec 20 08:15 libcidn.so -> libcidn.so.1
    lrwxrwxrwx 1 root root 15 Dec 20 08:15 libcidn.so.1 -> libcidn-2.14.so
    -rw-r--r-- 1 root root 71462 Dec 20 08:14 libc_nonshared.a
    -rwxr-xr-x 1 root root 131926 Dec 20 08:15 libcrypt-2.14.so
    -rw-r--r-- 1 root root 214372 Dec 20 08:15 libcrypt.a
    lrwxrwxrwx 1 root root 13 Dec 20 08:15 libcrypt.so -> libcrypt.so.1
    lrwxrwxrwx 1 root root 16 Dec 20 08:15 libcrypt.so.1 -> libcrypt-2.14.so
    -rw-r--r-- 1 root root 288 Dec 20 08:15 libc.so
    lrwxrwxrwx 1 root root 12 Dec 20 08:15 libc.so.6 -> libc-2.14.so
    [root@test lib]# strings libc.so.6 | grep GLIBC
    GLIBC_2.2.5
    GLIBC_2.2.6
    GLIBC_2.3
    GLIBC_2.3.2
    GLIBC_2.3.3
    GLIBC_2.3.4
    GLIBC_2.4
    GLIBC_2.5
    GLIBC_2.6
    GLIBC_2.7
    GLIBC_2.8
    GLIBC_2.9
    GLIBC_2.10
    GLIBC_2.11
    GLIBC_2.12
    GLIBC_2.13
    GLIBC_2.14
    GLIBC_PRIVATE
    [root@test lib]#

  5. 经验证发现GLIBC_2.14已经存在了,因为报错信息时/lib64/libc.so.6下找不到,接下来进行验证一下,是否是真的不存在:
    [hadoop@master ~]$ strings /lib64/libc.so.6 | grep GLIBC
    GLIBC_2.2.5
    GLIBC_2.2.6
    GLIBC_2.3
    GLIBC_2.3.2
    GLIBC_2.3.3
    GLIBC_2.3.4
    GLIBC_2.4
    GLIBC_2.5
    GLIBC_2.6
    GLIBC_2.7
    GLIBC_2.8
    GLIBC_2.9
    GLIBC_2.10
    GLIBC_2.11
    GLIBC_2.12
    GLIBC_PRIVATE
    [hadoop@master ~]$

    我是换了一台服务器,经验证确实不存在GLIBC_2.14
  6. 修改软连接指定到新的glibc库(这一步切记谨慎操作,危险动作,有可能会导致整个系统挂掉):

    1. 在修改软连接之前做好充分的准备工作:用root账号打开ftp
    2. 将/opt/glibc-2.14/lib/libc-2.14.so 复制到 /lib64/:
      [root@test lib]# pwd
      /opt/glibc-2.14/lib
      [root@test lib]# cp ./libc-2.14.so /lib64/
    3. 修改/lib64/libc.so.6软连接,让libc.so.6指向libc-2.14.so:
      [root@test lib64]$ mv libc.so.6 libc.so.6.bak&&ln -s libc-2.14.so libc.so.6
      切记目录一定不要搞错,不要删除原来的软连接,改个名字,两个命令要同时执行。如果万一出现了问题第一种解决办法:通过ftp把libc.so.6.bak 改回原来的libc.so.6;第二种:输入命令 export LD_LIBRARY_PATH=/opt/glibc-2.14/lib:$LD_LIBRARY_PATH 增加临时变量,路径一定是你自己安装目录
    4. 软连接修改好以后检查一下:
      [hadoop@test lib64]$ strings libc.so.6 | grep GLIBC
      GLIBC_2.2.5
      GLIBC_2.2.6
      GLIBC_2.3
      GLIBC_2.3.2
      GLIBC_2.3.3
      GLIBC_2.3.4
      GLIBC_2.4
      GLIBC_2.5
      GLIBC_2.6
      GLIBC_2.7
      GLIBC_2.8
      GLIBC_2.9
      GLIBC_2.10
      GLIBC_2.11
      GLIBC_2.12
      GLIBC_2.13
      GLIBC_2.14
      GLIBC_PRIVATE
      [hadoop@test lib64]$
  7. 到此为止glibc升级已经完成

二:再次运行代码报错:…/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.18’ not found

解决办法:升级gcc到 4.8.1

  1. 下载gcc-4.8.1.tar.gz:下载地址
  2. 具体的安装参考博客
    [root@init ~]# tar gcc-4.8.1.tar.gz
    [root@test ~]# cd gcc-4.8.1
    [root@test gcc-4.8.1]# ./contrib/download_prerequisites
    [root@test gcc-4.8.1]# mkdir gcc-build-4.8.1
    [root@test gcc-4.8.1]# cd gcc-build-4.8.1
    [root@test gcc-4.8.1]# ../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
    [root@test gcc-4.8.1]# make -j4
    [root@test gcc-4.8.1]# make install
    [root@test gcc-4.8.1]# reboot
    [root@test gcc-4.8.1]# gcc -v

三:再次运行代码没有问题了,但是发现服务器上中文乱码

详细解决办法:博客地址

[root@test lib]# mkdir locale[root@test gcc-4.8.1]# cp /usr/lib/locale/locale-archive /opt/glibc-2.14/lib/locale/locale-archive
原创粉丝点击