· 1. 升级原因
· 2. 检测系统glibc版本及动态库路径
o 2.1 检测 glibc 版本
o 2.2 检测动态库所在目录下的libc.so.6软连接的动态库
· 3 升级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
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
3 升级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
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)