目录
一、概述
1.1 背景
CentOS 7.x 默认的 GCC 版本为 4.8.5,GLIBC 版本为 2.17。然而,SuperMap 12i 产品是基于 GCC 8.3 和 GLIBC 2.28 环境编译的,因此无法在更低版本的 GCC 和 GLIBC 环境下运行。为了确保 SuperMap 12i 产品的正常运行,我们可能面临不得不考虑升级 GCC 和 GLIBC 版本,以获得 SuperMap 12i 产品的正常运行环境。
1.2 目标
本指南的目标是帮助管理员升级 CentOS 7.x 上的 GCC 和 GLIBC 版本,以确保 SuperMap 12i 产品的正常运行。
1.3 特别注意
-
若条件允许,建议直接升级操作系统版本到 CentOS 8.x 或更高版本,以获得更好的兼容性和安全性。
-
若条件不允许直接升级操作系统版本,在升级 GCC 和 GLIBC 版本之前,请务必确保备份重要数据和配置文件,以防升级过程中出现意外情况!!!
二、环境检查与准备
2.1 当前环境检查
-
确认当前 Linux 操作系统版本,以 CentOS 7.x 为例
cat /etc/redhat-release
-
确认当前操作系统的 GCC 版本
gcc -v
-
确认当前操作系统的 GLIBC 版本
ldd --version strings /lib64/libc.so.6 | grep GLIBC

-
确认 SuperMap 12i 产品在 CentOS 7.x 上运行失败,以 SuperMap iDesktopX 12i 为例
./startup # 启动 SuperMap iDesktopX 12i
由于 CentOS 7.x 默认的 GCC 版本为 4.8.5,GLIBC 版本为 2.17,而 SuperMap 12i 产品要求的 GCC 版本为 8.3,GLIBC 版本为 2.28,因此为满足 SuperMap 12i 产品运行的环境要求,我们就需要升级 GCC 和 GLIBC。
2.2 其他编译环境检查
-
确认当前操作系统的 make 版本
make -v
-
确认当前操作系统的 Python 版本
python3 -V
2.3 产品包准备
| 名称 | 版本 | 下载链接 | 说明 |
|---|---|---|---|
| GCC | 11.2.0 | gcc-11.2.0.tar.gz | GCC 版本不低于 8.3 |
| GLIBC | 2.34 | glibc-2.34.tar.gz | GLIBC 版本不低于 2.28 |
| make | 4.4 | make-4.4.tar.gz | gcc 11.2.0 编译依赖的 make 版本应不低于 3.79.1,推荐使用 make 4.4 |
| gmp | 6.1.0 | gmp-6.2.1.tar.gz | gcc 11.2.0 编译时依赖的 gmp 版本应不低于 4.2,推荐使用 gmp 6.1.0 |
| mpfr | 3.1.4 | mpfr-3.1.4.tar.gz | gcc 11.2.0 编译时依赖的 mpfr 版本应不低于 3.1.0,推荐使用 mpfr 3.1.4 |
| mpc | 1.0.3 | mpc-1.0.3.tar.gz | gcc 11.2.0 编译时依赖的 mpc 版本应不低于 0.8.0,推荐使用 mpc 1.0.3 |
| Python | 3.6.8 | Python-3.6.8.tgz | gcc 11.2.0 编译时依赖的 python 版本应不低于 3.6 |
三、升级 GCC 和 GLIBC
3.1 编译环境升级
3.1.1 Python 版本升级
- 安装 Python 3.6.8
若当前环境可以连接互联网,建议直接在线升级 Python 版本。若处于内网环境,则需要先将 Python 3.8.10 压缩包上传到内网环境,然后在内网环境中升级 Python 版本。下面以在线安装为例,说明如何升级 Python 版本。
sudo yum install python3 -y

- 校验 Python 3.6.8 安装是否成功
python3 -V

3.1.2 make 版本升级
-
解压 make 4.4 源码包
tar -zxvf make-4.4.tar.gz
-
配置 make 4.4 编译环境
cd make-4.4 ./configure --prefix=/usr type make sudo make check # 可能会报一些错误,不过不影响接下来 make 4.4 版本的安装


-
安装 make 4.4
sudo make install
-
校验 make 4.4 安装是否成功
make -v
3.1.3 gmp 版本升级
-
解压 gmp 6.1.0 源码包
tar -xvf gmp-6.1.0.tar.bz2
-
配置 gmp 6.1.0 编译环境
cd gmp-6.1.0 ./configure

-
编译安装 gmp 6.1.0
make sudo make install

3.1.4 mpfr 版本升级
-
解压 mpfr 3.1.4 源码包
tar -xvf mpfr-3.1.4.tar.bz2
-
配置 mpfr 3.1.4 编译环境
cd mpfr-3.1.4 ./configure

-
编译安装 mpfr 3.1.4
make sudo make install

3.1.5 mpc 版本升级
由于 mpc 编译时依赖 gmp 和 mpfr,因此需要先升级 gmp 和 mpfr 版本。
-
解压 mpc 1.0.3 源码包
tar -zxvf mpc-1.0.3.tar.gz
-
配置 mpc 1.0.3 编译环境
cd mpc-1.0.3 ./configure

-
编译安装 mpc 1.0.3
make sudo make install

3.2 GCC 和 GLIBC 升级
通过上述3.1章节对编译环境进行升级后,即可开始着手编译安装 GCC 11.2.0 和 GLIBC 2.33,详细步骤如下。请务必注意每一步的细节操作!接下来对 GCC 和 GLIBC 的编译安装操作存在一定风险,稍有不慎可能会导致系统不稳定甚至无法启动。
3.2.1 编译安装 GCC 11.2.0
-
解压 gcc 11.2.0 源码包
tar -zxvf gcc-11.2.0.tar.gz
-
配置 gcc 11.2.0 编译环境
cd gcc-11.2.0 mkdir build cd build ../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib

-
编译安装 gcc 11.2.0
make -j 4 # 4 为 CPU 核心数,根据实际情况调整。该编译步骤耗时较长,请耐心等待。具体耗时根据 CPU 核心数和硬盘性能而定,可参考在 4 核 CPU 机器上编译耗时约 60 分钟。 sudo yum -y remove gcc g++ # 移除旧版本的 gcc 和 g++ sudo make install


-
校验 gcc 11.2.0 安装是否成功
gcc -v
-
配置 gcc 11.2.0 全局可用
sudo ln -s /usr/local/bin/gcc /usr/bin/gcc sudo ln -s /usr/local/bin/g++ /usr/bin/g++ sudo rm -f /usr/lib64/libstdc++.so.6 sudo ln -s /usr/local/lib64/libstdc++.so.6.0.29 /usr/lib64/libstdc++.so.6
3.2.2 编译安装 GLIBC 2.34
-
解压 glibc 2.34 源码包
tar -zxvf glibc-2.34.tar.gz
-
配置 glibc 2.34 编译环境
cd glibc-2.34 mkdir build cd build ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin

-
编译安装 glibc 2.34
su root make make install


GLIBC 2.34 安装时大概率会遇到如上图所示异常,此时很多基础命令也无法使用了,无需担忧,这是正常现象。
接下来千万不要执行关机和重启操作,请继续输入如下命令,注意把 sln 命令中的路径替换为你实际的 GLIBC 2.34 安装路径:
LD_PRELOAD=/lib64/libc-2.34.so sln /home/centos/gccAndGlibc/glibc-2.34/build/ libc.so.6 /lib64/libc.so.6 LD_PRELOAD=/lib64/libc-2.34.so sln /home/centos/gccAndGlibc/glibc-2.34/build/ dlfcn/libdl.so.2 /lib64/libdl.so.2 LD_PRELOAD=/lib64/libc-2.34.so sln /home/centos/gccAndGlibc/glibc-2.34/build/ nptl/libpthread.so.0 /lib64/libpthread.so.0 LD_PRELOAD=/lib64/libc-2.34.so sln /home/centos/gccAndGlibc/glibc-2.34/build/ elf/ld-linux-x86-64.so.2 /usr/lib64/ld-linux-x86-64.so.2
执行完上述命令后,再次执行 GLIBC 2.34 安装命令。
make install
再次安装 GLIBC 2.34 后,最终可能输出如上图所示的异常信息,这是正常现象,无需担心,该异常已不影响 GLIBC 2.34 的正常使用。
-
校验 glibc 2.34 安装是否成功
ldd --version strings /lib64/libc.so.6 | grep GLIBC

根据上图对升级后的操作系统的GCC和GLIBC版本校验结果,确认环境已升级成功。
四、验证升级结果
由于已更新了 CentOS 7.x 操作系统的 GCC 和 GLIBC 版本,GLIBC 2.34 版本已满足 SuperMap 12i 产品运行要求,但 SuperMap 12i 产品内部自带的 GCC 相关依赖库不是本次安装的 GCC 11.2.0 版本,因此需要使用 GCC 11.2.0 编译的相关依赖库文件替换 SuperMap 12i 产品内部自带的相关依赖库,才可确保 SuperMap 12i 产品正常运行。下面还是以 SuperMap iDesktopX 12i 为例进行操作:
cp -r /usr/local/lib64/libstdc++.so* /home/centos/SuperMap/supermap-idesktopx-2025u1-linux-x64-bin/bin/
ls /home/centos/SuperMap/supermap-idesktopx-2025u1-linux-x64-bin/bin | grep libstdc++.so

再次使用 SuperMap iDesktopX 12i 产品在 CentOS 7.x 上运行正常,确认 iDesktopX 12i 已可正常运行和使用。
./startup # 启动 SuperMap iDesktopX 12i


五、总结
本指南系统阐述了 CentOS 7.x 操作系统中 GCC 编译器与 GLIBC 库的完整升级方案,专为满足 SuperMap 12i 产品的运行环境需求而编写。由于 CentOS 7.x 默认搭载的 GCC 4.8.5 编译器与 GLIBC 2.17 运行时库无法满足 SuperMap 12i 对 GCC 8.3 及 GLIBC 2.28 的最低版本要求,系统管理员可通过手动编译安装的方式严格遵循依赖关系顺序执行完成环境升级。
重要提醒:系统核心组件升级存在一定风险,请务必在充分理解操作步骤和潜在影响的基础上进行。如有疑问,建议咨询专业技术人员或寻求官方支持。

366

被折叠的 条评论
为什么被折叠?



