SuperMap 12i 运行难题终结者:CentOS 7.x 运行环境完美升级方案

一、概述

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
    

    检查操作系统版本.png

  • 确认当前操作系统的 GCC 版本

    gcc -v
    

    检查GCC版本.png

  • 确认当前操作系统的 GLIBC 版本

    ldd --version
    strings /lib64/libc.so.6 | grep GLIBC
    

    检查GLIBC版本.png
    检查操作系统支持的GLIBC版本.png

  • 确认 SuperMap 12i 产品在 CentOS 7.x 上运行失败,以 SuperMap iDesktopX 12i 为例

    ./startup # 启动 SuperMap iDesktopX 12i
    

    iDesktopX 12i 在 CentOS7.9 操作系统上启动失败.png

  由于 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
    

    检查make版本.png

  • 确认当前操作系统的 Python 版本

    python3 -V
    

    检查Python版本.png

2.3 产品包准备

名称版本下载链接说明
GCC11.2.0gcc-11.2.0.tar.gzGCC 版本不低于 8.3
GLIBC2.34glibc-2.34.tar.gzGLIBC 版本不低于 2.28
make4.4make-4.4.tar.gzgcc 11.2.0 编译依赖的 make 版本应不低于 3.79.1,推荐使用 make 4.4
gmp6.1.0gmp-6.2.1.tar.gzgcc 11.2.0 编译时依赖的 gmp 版本应不低于 4.2,推荐使用 gmp 6.1.0
mpfr3.1.4mpfr-3.1.4.tar.gzgcc 11.2.0 编译时依赖的 mpfr 版本应不低于 3.1.0,推荐使用 mpfr 3.1.4
mpc1.0.3mpc-1.0.3.tar.gzgcc 11.2.0 编译时依赖的 mpc 版本应不低于 0.8.0,推荐使用 mpc 1.0.3
Python3.6.8Python-3.6.8.tgzgcc 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

安装python3.png

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

检查Python3版本.png

3.1.2 make 版本升级

  • 解压 make 4.4 源码包

    tar -zxvf make-4.4.tar.gz
    

    解压make4.4源码包.png

  • 配置 make 4.4 编译环境

    cd make-4.4
    ./configure --prefix=/usr
    type make
    sudo make check # 可能会报一些错误,不过不影响接下来 make 4.4 版本的安装
    

    配置make4.4编译环境.png
    make4.4编译环境配置完成.png
    检查make4.4编译环境.png

  • 安装 make 4.4

    sudo make install
    

    安装make4.4.png

  • 校验 make 4.4 安装是否成功

    make -v
    

    检查make4.4版本.png

3.1.3 gmp 版本升级

  • 解压 gmp 6.1.0 源码包

    tar -xvf gmp-6.1.0.tar.bz2
    

    解压gmp6.1.0源码包.png

  • 配置 gmp 6.1.0 编译环境

    cd gmp-6.1.0
    ./configure
    

    配置gmp6.1.0编译环境.png
    配置gmp6.1.0编译环境完成.png

  • 编译安装 gmp 6.1.0

    make
    sudo make install
    

    编译gmp6.1.0源码.png
    安装gmp6.1.0.png

3.1.4 mpfr 版本升级

  • 解压 mpfr 3.1.4 源码包

    tar -xvf mpfr-3.1.4.tar.bz2
    

    解压mpfr3.1.4源码包.png

  • 配置 mpfr 3.1.4 编译环境

    cd mpfr-3.1.4
    ./configure
    

    配置mpfr3.1.4编译环境.png
    配置mpfr3.1.4编译环境完成.png

  • 编译安装 mpfr 3.1.4

    make
    sudo make install
    

    编译mpfr3.1.4源码.png
    安装mpfr3.1.4.png

3.1.5 mpc 版本升级

  由于 mpc 编译时依赖 gmp 和 mpfr,因此需要先升级 gmp 和 mpfr 版本。

  • 解压 mpc 1.0.3 源码包

    tar -zxvf mpc-1.0.3.tar.gz
    

    解压mpc1.0.3源码包.png

  • 配置 mpc 1.0.3 编译环境

    cd mpc-1.0.3
    ./configure
    

    配置mpc1.0.3编译环境.png
    配置mpc1.0.3编译环境完成.png

  • 编译安装 mpc 1.0.3

    make
    sudo make install
    

    编译mpc1.0.3源码.png
    安装mpc1.0.3.png

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
    

    解压gcc11.2.0源码包.png

  • 配置 gcc 11.2.0 编译环境

    cd gcc-11.2.0
    mkdir build
    cd build
    ../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
    

    配置gcc11.2.0编译环境.png
    配置gcc11.2.0编译环境完成.png

  • 编译安装 gcc 11.2.0

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

    编译gcc11.2.0源码.png
    移除旧版本的gcc和g++.png
    安装gcc11.2.0.png

  • 校验 gcc 11.2.0 安装是否成功

    gcc -v
    

    检查GCC11.2.0安装成功.png

  • 配置 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
    

    解压glibc2.34源码包.png

  • 配置 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
    

    配置glibc2.34编译环境.png
    配置glibc2.34编译环境完成.png

  • 编译安装 glibc 2.34

    su root
    make
    make install
    

    编译glibc2.34源码.png
    安装glibc2.34.png
    glibc2.34安装异常信息.png

      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
    

    重新指定glibc2.34生成的依赖库.png

      执行完上述命令后,再次执行 GLIBC 2.34 安装命令。

    make install
    

    安装glibc2.34.png

      再次安装 GLIBC 2.34 后,最终可能输出如上图所示的异常信息,这是正常现象,无需担心,该异常已不影响 GLIBC 2.34 的正常使用。

  • 校验 glibc 2.34 安装是否成功

    ldd --version
    strings /lib64/libc.so.6 | grep GLIBC
    

    通过ldd检查当前glibc版本.png
    再次检查操作系统支持的GLIBC版本.png

      根据上图对升级后的操作系统的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

给 iDesktopX 12i 配置 gcc11.2.0 运行依赖.png

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

./startup # 启动 SuperMap iDesktopX 12i

iDesktopX 12i 在升级 GCC 和 GLIBC 版本的 CentOS7.9 操作系统上正常启动和使用.png

iDesktopX 12i 启动界面.png

五、总结

  本指南系统阐述了 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 的最低版本要求,系统管理员可通过手动编译安装的方式严格遵循依赖关系顺序执行完成环境升级。

重要提醒:系统核心组件升级存在一定风险,请务必在充分理解操作步骤和潜在影响的基础上进行。如有疑问,建议咨询专业技术人员或寻求官方支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值