·        1. 升级原因

·        2. 检测系统glibc版本及动态库路径

o   2.1 检测 glibc 版本

o   2.2 检测动态库所在目录下的libc.so.6软连接的动态库

·        升级glibc版本

o   3.1 升级libc.so版本

o   3.2 升级glibcxx版本

·        4. 验证升级后的glibc是否满足引擎需要

1. 升级原因

由于目前在项目中使用的linux系统都为centos6.4原生系统,其自带的libc动态库版本为2.12版本。随着引擎功能的不断添加,很多引擎需要依赖高版本的libc动态库,所以我们在部署依赖高版本libc动态库的相关引擎时,需要将环境中的libc版本升级至2.14

2. 检测系统glibc版本及动态库路径

2.1 检测 glibc 版本

(适用于没有进行过libc升级或者降级操作的机器)

# getconf -a |grep glibc -i (getconf -a获取全部系统信息|grep glibc -i 提取有glibc字符(-i 不分大小写)相关的行数)

出现如下所示,版本号为:2.12,则需要升级为2.14版本

# GNU_LIBC_VERSION                   glibc 2.12

2.2 检测动态库所在目录下的libc.so.6软连接的动态库

a、查看当前系统所设定的动态库路径

# env | grep LD_LIBRARY_PATH

如下所示,表示动态库路径(LD_LIBRARY_PATH) .:/lib64:/usr/local/engine:/usr/local/engine/mkl

 wKiom1X7d9bD-V1EAAB-jw-EQXM410.jpg

b、在设定的动态库路径(LD_LIBRARY_PATH)下找寻第一个libc.so.6动态库

(注意有先后顺序,按照动态库的顺序,在上述示例中,首先找寻当前目录下" =. ";然后是/lib64目录下"./lib64 ";再然后是"/usr/local/engine "···

# ll /lib64/libc.so.6

如下所示显示为libc-2.14.so,如果显示为 libc-2.12.so以下的版本,则需要升级为 libc-2.14.so

 wKioL1X7ehzzm9CUAABqDEw_nCw063.jpg

升级glibc版本

  升级glibc,包括升级libc.so和升级glibcxx

3.1 升级libc.so版本

1. 修改LD_LIBRARY_PATH环境变量,将LD_LIBRARY_PATH的值改为  /lib64:/usr/local/engine:/usr/local/engine/mkl 

# export LD_LIBRARY_PATH=/lib64:/usr/local/engine:/usr/local/engine/mkl

2.下载glibc2.14安装包 glibc-2.14.tar.gz,解压 tar-zxvf glibc-2.14.tar.gz

3. 在解压后的文件夹glibc-2.14下创建一个名为 build 的文件夹编译时使用

4.build文件夹里,编译新版本glibc

1 编译glibc

 

# ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin --disable-sanity-checks
# make
# make install

注意:make 注意事项(编译时,需要动态库路径不包含当前路径),makeinstall 注意如果最后报错,可以忽略,但需要确定/lib64下已经安装了最新的glibc-2.14(执行命令:lllibc.so.6  查看)

2验证libc升级成功

 

 # getconf -a |grep glibc -i

如图所示:则表示libc升级成功

 

GNU_LIBC_VERSION                   glibc 2.14

 

 

3.2 升级glibcxx版本

  1. 确认动态库路径首地址为/lib64

# env | grep LD_LIBRARY_PATH

如图所示,则表示动态库路径首地址为/lib64

 wKiom1X7d_nzhNtzAABdB-8qfQ8892.jpg

2. 下载libstdc安装包 libstdc.so.rar 解压到动态库路径首地址  /lib64 

# unrar  libstdc.so.rar /lib64

 

3. 恢复LD_LIBRARY_PATH的值,恢复为原来的  .:/lib64:/usr/local/engine:/usr/local/engine/mkl 

 

# export LD_LIBRARY_PATH= .:/lib64:/usr/local/engine:/usr/local/engine/mkl

至此,glibc升级全部完成,下一节将验证升级后的glibc是否满足引擎需要

4. 验证升级后的glibc是否满足引擎需要

使用ldd命令检查用到的动态库,判断升级后是否满足动态库的需要; 

# ldd -v /usr/local/engine/nlp/bin/libner_iFlyWS_Engine.so

完整动态库如图所示:

 Expand source

[root@localhost bin]# ldd -v libner_iFlyWS_Engine.so
 
    linux-vdso.so.1 =>  (0x00007fffd27bf000)
 
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f990627f000)
 
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f990607a000)
 
    libboost_regex.so.1.42.0 => ./libboost_regex.so.1.42.0 (0x00007f9905da0000)
 
    libjsoncpp.so => ./libjsoncpp.so (0x00007f9905b5d000)
 
    libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f9905855000)
 
    libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f990563f000)
 
    libc.so.6 => /lib64/libc.so.6 (0x00007f99052b3000)
 
    /lib64/ld-linux-x86-64.so.2 (0x00007f9906781000)
 
    libm.so.6 => /lib64/libm.so.6 (0x00007f990502f000)
 
 Version information:
 
    ./libner_iFlyWS_Engine.so:
 
        libgcc_s.so.1 (GCC_3.0) => /lib64/libgcc_s.so.1
 
        libdl.so.2 (GLIBC_2.2.5) => /lib64/libdl.so.2
 
        libpthread.so.0 (GLIBC_2.2.5) => /lib64/libpthread.so.0
 
        libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6
 
        libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
 
        libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
 
        libstdc++.so.6 (GLIBCXX_3.4.14) => /lib64/libstdc++.so.6
 
        libstdc++.so.6 (GLIBCXX_3.4.5) => /lib64/libstdc++.so.6
 
        libstdc++.so.6 (CXXABI_1.3) => /lib64/libstdc++.so.6
 
        libstdc++.so.6 (GLIBCXX_3.4.15) => /lib64/libstdc++.so.6
 
        libstdc++.so.6 (GLIBCXX_3.4) => /lib64/libstdc++.so.6
 
    /lib64/libpthread.so.0:
 
        ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
 
        ld-linux-x86-64.so.2 (GLIBC_2.2.5) => /lib64/ld-linux-x86-64.so.2
 
        ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2
 
        libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6
 
        libc.so.6 (GLIBC_2.3.2) => /lib64/libc.so.6
 
        libc.so.6 (GLIBC_PRIVATE) => /lib64/libc.so.6
 
        libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
 
    /lib64/libdl.so.2:
 
        ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2
 
        libc.so.6 (GLIBC_PRIVATE) => /lib64/libc.so.6
 
        libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
 
    ./libboost_regex.so.1.42.0:
 
        libgcc_s.so.1 (GCC_3.0) => /lib64/libgcc_s.so.1
 
        libpthread.so.0 (GLIBC_2.2.5) => /lib64/libpthread.so.0
 
        libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6
 
        libc.so.6 (GLIBC_2.3.4) => /lib64/libc.so.6
 
        libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
 
        libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
 
        libstdc++.so.6 (GLIBCXX_3.4.11) => /lib64/libstdc++.so.6
 
        libstdc++.so.6 (CXXABI_1.3) => /lib64/libstdc++.so.6
 
        libstdc++.so.6 (GLIBCXX_3.4.15) => /lib64/libstdc++.so.6
 
        libstdc++.so.6 (GLIBCXX_3.4) => /lib64/libstdc++.so.6
 
    ./libjsoncpp.so:
 
        libgcc_s.so.1 (GCC_3.0) => /lib64/libgcc_s.so.1
 
        libpthread.so.0 (GLIBC_2.2.5) => /lib64/libpthread.so.0
 
        libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6
 
        libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
 
        libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
 
        libstdc++.so.6 (GLIBCXX_3.4.5) => /lib64/libstdc++.so.6
 
        libstdc++.so.6 (CXXABI_1.3) => /lib64/libstdc++.so.6
 
        libstdc++.so.6 (GLIBCXX_3.4) => /lib64/libstdc++.so.6
 
    /lib64/libstdc++.so.6:
 
        libm.so.6 (GLIBC_2.2.5) => /lib64/libm.so.6
 
        ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
 
        libgcc_s.so.1 (GCC_4.2.0) => /lib64/libgcc_s.so.1
 
        libgcc_s.so.1 (GCC_3.3) => /lib64/libgcc_s.so.1
 
        libgcc_s.so.1 (GCC_3.0) => /lib64/libgcc_s.so.1
 
        libc.so.6 (GLIBC_2.3) => /lib64/libc.so.6
 
        libc.so.6 (GLIBC_2.3.2) => /lib64/libc.so.6
 
        libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
 
    /lib64/libgcc_s.so.1:
 
        libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
 
        libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
 
    /lib64/libc.so.6:
 
        ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2
 
        ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
 
    /lib64/libm.so.6:
 
        libc.so.6 (GLIBC_PRIVATE) => /lib64/libc.so.6
 
        libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6

如果没有依赖库,则如图所示

 Expand source

./libner_iFlyWS_Engine.so: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by ./libner_iFlyWS_Engine.so)
 
./libner_iFlyWS_Engine.so: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by ./libner_iFlyWS_Engine.so)
 
    linux-vdso.so.1 =>  (0x00007fff34cf4000)
 
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fb361d01000)
 
    libdl.so.2 => /lib64/libdl.so.2 (0x00007fb361afc000)
 
    libboost_regex.so.1.42.0 => not found
 
    libjsoncpp.so => not found
 
    libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007fb3617f5000)
 
    libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fb3615df000)
 
    libc.so.6 => /lib64/libc.so.6 (0x00007fb361253000)
 
    /lib64/ld-linux-x86-64.so.2 (0x00007fb362225000)
 
    libm.so.6 => /lib64/libm.so.6 (0x00007fb360fcf000)