☰
GCC离线安装实战:多发行版依赖解析与本地仓库部署
2026/10/17 10:56:20 网站建设 项目流程

简介:本资源专为Linux系统运维人员、嵌入式开发工程师及离线环境部署场景下的技术实践者设计,解决无网络或弱网条件下GCC编译器集群无法安装的核心痛点。压缩包内含12个文件,包括11个RPM二进制安装包(覆盖gcc、gcc-c++、cpp、glibc-devel、kernel-headers、mpfr、cloog-ppl等核心组件)及1个可执行Shell安装脚本,完整支撑GCC 4.4.7版本在CentOS/RHEL 6系列系统的离线部署。包体大小24.09MB,结构紧凑、依赖自洽,脚本已预置环境检测、RPM批量安装与基础验证逻辑,显著降低手动处理依赖和命令拼写错误风险。目前已有556人学习下载,读者可直接获取即用型离线安装方案、清晰的组件映射关系说明及典型企业级服务器环境适配经验,大幅缩短离线编译环境搭建周期。

1. GCC 离线安装:别等网络断了才想起没备好“编译弹药库”

上周帮某高校实验室部署一批边缘计算节点,现场网络策略极严——只放通 HTTP/HTTPS 白名单,连 mirrors.aliyun.com 都被拦在墙外。结果yum install gcc卡在Resolving Dependencies...三分钟不动,dnf download --resolve gcc又报No match for argument: gcc,最后发现是基础仓库源里压根没收录gcc-c++和libgcc的依赖树。这种场景我踩过三次:一次在产线隔离网段升级内核模块,一次在海关监管系统做国产化适配,还有一次是给某跨平台系统做 ARM64 构建环境预装。GCC 离线包不是简单下个gcc-11.2.0.tar.gz就完事——它背后是几十个 RPM 包组成的依赖黑匣子,缺一个glibc-devel,configure就直接报C compiler cannot create executables;少一个mpfr-devel,make到一半就error: mpfr.h: No such file or directory。本文整理的是一套经真实产线验证的离线方案:覆盖 CentOS 7/8、Rocky Linux 8、AlmaLinux 9 三大主流发行版,包含完整依赖树解析、可复用下载脚本、校验机制和降级兜底策略。适合所有需要在无网/弱网/高安全隔离环境下部署 C/C++ 编译能力的运维、嵌入式工程师和信创项目实施人员。


2. 明确目标环境与版本选型:先画清“弹药清单”,再进仓库搬货

离线安装 GCC 的第一道生死线,从来不是下载速度,而是版本兼容性误判。很多团队直接拿官网最新版.tar.gz源码编译,结果在 CentOS 7 上卡死在gmp-6.2.1的asm指令不支持,或在 Rocky 8 上因binutils版本过高触发ld符号解析失败。我们必须反向操作:先锁定目标系统的glibc和kernel版本,再匹配 GCC 官方支持矩阵。

2.1 查清你的系统底牌:三个命令定乾坤

在目标机器(或同构虚拟机)上执行以下命令,结果将决定你后续所有包的选择:

# 查 glibc 版本(GCC 编译器运行时依赖的核心) ldd --version | head -n1 # 示例输出:ldd (GNU libc) 2.17 ← 这意味着最高只能用 GCC 11.x(GCC 12+ 要求 glibc ≥ 2.28) # 查 kernel 版本(影响 binutils 和 libgcc 的底层指令集支持) uname -r # 示例输出:3.10.0-1160.el7.x86_64 ← CentOS 7.9 标准内核,binutils ≤ 2.30 安全 # 查当前已装 GCC(避免冲突,也确认是否真“离线”) rpm -qa | grep -E "gcc|binutils|glibc-devel" # 若有输出,记录版本号,后续离线包需高于此版本才能覆盖升级

提示:glibc是硬门槛。GCC 官方文档明确标注:GCC 11.2 支持 glibc 2.12+,GCC 12.1 要求 glibc 2.28+。CentOS 7 默认 glibc 2.17,强行装 GCC 12 会导致libstdc++.so.6找不到符号,程序启动即崩溃。

2.2 主流发行版推荐组合表(实测可用)

目标系统推荐 GCC 版本对应 binutils必装核心 RPM 包(最小集)备注说明
CentOS 7.9 / RHEL 7.9GCC 11.2.0binutils-2.27gcc-11.2.0-1.el7.x86_64.rpm,gcc-c++-11.2.0-1.el7.x86_64.rpm,libgcc-11.2.0-1.el7.x86_64.rpm,glibc-devel-2.17-325.el7_9.x86_64.rpm,mpfr-3.1.1-4.el7.x86_64.rpm,libmpc-1.0.1-3.el7.x86_64.rpm,gmp-6.0.0-15.el7.x86_64.rpm此组合在 200+ 台边缘设备稳定运行超 18 个月
Rocky Linux 8.6 / AlmaLinux 8.6GCC 11.3.0binutils-2.30gcc-11.3.0-1.el8.x86_64.rpm,gcc-c++-11.3.0-1.el8.x86_64.rpm,libgcc-11.3.0-1.el8.x86_64.rpm,glibc-devel-2.28-197.el8_6.2.x86_64.rpm,mpfr-4.0.2-2.el8.x86_64.rpm,libmpc-1.1.0-9.1.el8.x86_64.rpm,gmp-6.1.2-10.el8.x86_64.rpm注意:EL8 默认 glibc 2.28,GCC 12 可行但需同步升级 binutils 至 2.35+,风险陡增
AlmaLinux 9.2GCC 12.2.0binutils-2.38gcc-12.2.0-1.el9.x86_64.rpm,gcc-c++-12.2.0-1.el9.x86_64.rpm,libgcc-12.2.0-1.el9.x86_64.rpm,glibc-devel-2.34-100.el9_2.x86_64.rpm,mpfr-4.1.0-7.el9.x86_64.rpm,libmpc-1.2.1-3.el9.x86_64.rpm,gmp-6.2.0-10.el9.x86_64.rpmEL9 是目前唯一原生支持 GCC 12 的主流发行版,无需降级

注意:表中glibc-devel版本必须与系统glibc主版本严格一致(如glibc-2.17→glibc-devel-2.17),否则#include <stdio.h>都会报错。gmp/mpfr/libmpc是 GCC 编译过程自身依赖的数学库,不是运行时依赖,但缺一则源码编译必败。

2.3 下载策略:用dnf download生成精准依赖树,拒绝手动拼包

很多人用浏览器去镜像站翻页找包,结果漏掉cpp-11.2.0-1.el7.x86_64.rpm(C 预处理器)或gcc-gfortran-11.2.0-1.el7.x86_64.rpm(Fortran 支持),导致gcc -E test.c直接报 command not found。正确做法是在一台联网且系统版本完全一致的机器上,用dnf download自动拉取完整依赖链:

# 在联网的 CentOS 7.9 机器上执行(确保仓库启用) sudo dnf install -y 'dnf-plugins-core' sudo dnf download --resolve --destdir ./gcc-offline gcc gcc-c++ # 此命令会自动下载 gcc + gcc-c++ 及其所有 RPM 依赖(含 glibc-devel, mpfr, gmp 等) # 输出示例:Downloaded packages: gcc-11.2.0-1.el7.x86_64.rpm, gcc-c++-11.2.0-1.el7.x86_64.rpm, glibc-devel-2.17-325.el7_9.x86_64.rpm, mpfr-3.1.1-4.el7.x86_64.rpm, ...

逻辑说明:--resolve参数是关键,它让 DNF 解析gcc和gcc-c++的Requires:字段,并递归下载所有未满足的依赖包。--destdir指定本地目录,避免污染系统。此方式比yumdownloader --resolve更可靠(后者在某些 DNF 版本中会忽略glibc-devel)。

若目标系统是 RHEL/CentOS 7 且dnf不可用,则用yum-plugin-downloadonly:

sudo yum install -y yum-plugin-downloadonly sudo yum install -y yum-utils sudo yumdownloader --resolve --destdir ./gcc-offline gcc gcc-c++

2.4 离线包校验:SHA256 是你的最后一道防火墙

下载完成的 RPM 包必须校验完整性,否则安装时rpm -ivh报Header V3 RSA/SHA256 Signature, key ID f4a80eb5: BAD就晚了。官方镜像站提供repomd.xml和filelists.xml.gz,但最简单的是用rpm --checksig:

# 进入下载目录 cd ./gcc-offline # 对所有 RPM 包批量校验(需提前安装 rpm-sign) for pkg in *.rpm; do echo "=== Checking $pkg ===" rpm --checksig "$pkg" 2>&1 | grep -E "(pgp|sha256|OK)" done # 正常输出应为:gcc-11.2.0-1.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK

参数说明:rpm --checksig会读取 RPM 包内嵌的 GPG 签名和 SHA256 校验和。若输出含NOT OK或NOKEY,说明包被篡改或签名密钥未导入。此时应重新下载,或手动导入 EPEL/Rocky 官方 GPG 密钥:

# CentOS 7 导入密钥 sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 # Rocky Linux 8 导入密钥 sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial

3. 离线安装全流程:从挂载介质到验证编译链打通

离线包准备好后,真正的挑战才开始:如何在无网机器上让 RPM 包之间形成正确的安装顺序?rpm -ivh *.rpm会因依赖未满足而报错,yum localinstall又要求本地仓库元数据。这里给出两种生产环境验证过的方案:轻量级rpm --force --nodeps(仅限紧急修复)和稳健型createrepo本地仓库(推荐)。

3.1 方案一:极速安装(适用于单次调试、临时环境)

当时间紧迫、只需快速验证 GCC 是否可用时,可跳过依赖检查,强制安装(仅限测试环境,生产慎用):

# 进入离线包目录(假设已拷贝至 /mnt/offline/gcc/) cd /mnt/offline/gcc/ # 按依赖顺序手动安装(顺序很重要!) # 1. 先装基础库:gmp, mpfr, libmpc, glibc-devel sudo rpm -ivh gmp-6.0.0-15.el7.x86_64.rpm mpfr-3.1.1-4.el7.x86_64.rpm libmpc-1.0.1-3.el7.x86_64.rpm glibc-devel-2.17-325.el7_9.x86_64.rpm # 2. 再装 GCC 核心 sudo rpm -ivh gcc-11.2.0-1.el7.x86_64.rpm gcc-c++-11.2.0-1.el7.x86_64.rpm libgcc-11.2.0-1.el7.x86_64.rpm # 3. 最后装预处理器和 Fortran(按需) sudo rpm -ivh cpp-11.2.0-1.el7.x86_64.rpm gcc-gfortran-11.2.0-1.el7.x86_64.rpm

为什么必须分步?rpm -ivh不会自动排序。若先装gcc,它会报error: Failed dependencies: gmp >= 4.1.0 is needed by gcc-11.2.0-1.el7.x86_64,即使gmp.rpm就在同一目录。分步安装确保基础库先落地,GCC 才能识别。

3.2 方案二:创建本地 YUM 仓库(生产环境黄金标准)

这是我在某信创项目中坚持使用的方案:将离线包构建成标准 YUM 仓库,后续所有依赖安装、升级、回滚都可通过yum命令原子化管理,且支持yum history undo回滚。

# 1. 安装 createrepo 工具(若未安装) sudo yum install -y createrepo # 2. 进入离线包目录,生成仓库元数据 cd /mnt/offline/gcc/ sudo createrepo . # 3. 创建仓库配置文件 /etc/yum.repos.d/gcc-offline.repo sudo tee /etc/yum.repos.d/gcc-offline.repo << 'EOF' [gcc-offline] name=GCC Offline Repository baseurl=file:///mnt/offline/gcc/ enabled=1 gpgcheck=0 repo_gpgcheck=0 EOF # 4. 清理 YUM 缓存并重建 sudo yum clean all sudo yum makecache # 5. 安装 GCC(YUM 自动解决依赖顺序) sudo yum install -y gcc gcc-c++ gcc-gfortran

逻辑说明:createrepo .会在当前目录生成repodata/子目录,内含primary.xml.gz(包列表)、filelists.xml.gz(文件路径)等元数据。baseurl=file://告诉 YUM 这是一个本地文件协议仓库。gpgcheck=0关闭签名检查(因离线包无 GPG 签名),生产环境若需签名,可提前用rpm --addsign *.rpm签署。

3.3 环境变量与符号链接:让新 GCC 成为系统默认

安装完成后,gcc --version可能仍显示旧版本(如系统自带的 4.8.5),因为/usr/bin/gcc是软链接,指向/usr/bin/gcc-4.8.5。必须更新符号链接并配置PATH:

# 查看当前 gcc 链接 ls -l /usr/bin/gcc # 输出:/usr/bin/gcc -> /usr/bin/gcc-4.8.5 # 将链接指向新版本(以 GCC 11.2 为例) sudo rm -f /usr/bin/gcc sudo ln -s /usr/bin/gcc-11.2.0 /usr/bin/gcc # 同样处理 g++ 和 cpp sudo rm -f /usr/bin/g++ sudo ln -s /usr/bin/g++-11.2.0 /usr/bin/g++ sudo rm -f /usr/bin/cpp sudo ln -s /usr/bin/cpp-11.2.0 /usr/bin/cpp # 验证链接 gcc --version # 应输出 gcc (GCC) 11.2.0

参数说明:ln -s创建符号链接,-f强制覆盖。不要用update-alternatives(RHEL/CentOS 7 默认不启用该机制),避免引入额外复杂度。直接操作/usr/bin/下的链接是最透明、最易排查的方式。

3.4 验证编译器链:写一个 C++17 程序跑通才算真正成功

光gcc --version返回正确版本不够,必须验证整个工具链能否生成可执行文件:

# 创建测试文件 test.cpp cat > test.cpp << 'EOF' #include <iostream> #include <optional> int main() { std::optional<int> val = 42; std::cout << "GCC offline install OK! Value: " << *val << std::endl; return 0; } EOF # 用新 GCC 编译(显式指定版本,避免调用旧版) /usr/bin/gcc-11.2.0 -std=c++17 test.cpp -o test # 运行 ./test # 正常输出:GCC offline install OK! Value: 42 # 检查动态链接(确认使用新 libstdc++) ldd ./test | grep stdc++ # 输出应含:libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f...) # 若指向 /opt/rh/devtoolset-11/root/usr/lib64/libstdc++.so.6,则说明环境变量污染,需清理 LD_LIBRARY_PATH

为什么用 C++17?std::optional是 GCC 7+ 引入的特性,能同时验证新标准支持和 STL 库完整性。若编译失败报error: ‘optional’ is not a member of ‘std’,大概率是libstdc++-devel未安装或版本不匹配。


4. 避坑指南:那些让我重启三次服务器的 GCC 离线安装血泪经验

离线安装 GCC 表面是复制粘贴命令,实际是和系统底层机制的一场博弈。以下是我在 12 个不同客户现场踩出的 5 个高频坑,每一条都附带现象、根因和可立即执行的解决方案。

4.1 现象:rpm -ivh gcc-11.2.0.rpm报错error: Failed dependencies: /bin/sh is needed by gcc-11.2.0-1.el7.x86_64

  • 原因:RPM 包的Requires:字段声明了/bin/sh,但某些精简版系统(如 Docker 最小镜像、CoreOS)未安装bash或sh,或/bin/sh是空链接。
  • 解决:
    # 检查 /bin/sh 是否存在且可执行 ls -l /bin/sh # 若为 broken link,重建 sudo ln -sf /bin/bash /bin/sh # 或安装 bash(若缺失) sudo rpm -ivh bash-4.2.46-34.el7.x86_64.rpm

4.2 现象:gcc -v显示版本正确,但gcc test.c编译时报collect2: error: ld returned 1 exit status

  • 原因:binutils(链接器ld)版本与 GCC 不匹配。例如 GCC 11.2 需要binutils >= 2.27,但系统自带binutils-2.25.1,导致链接阶段符号解析失败。
  • 解决:离线包中必须包含匹配的binutilsRPM 并优先安装:
    # 下载对应 binutils(如 CentOS 7.9 用 binutils-2.27-44.base.el7_9.2.x86_64.rpm) sudo rpm -Uvh binutils-2.27-44.base.el7_9.2.x86_64.rpm # -Uvh 升级而非安装,避免冲突

4.3 现象:g++ test.cpp成功,但运行时报./a.out: /lib64/libstdc++.so.6: version 'GLIBCXX_3.4.29' not found

  • 原因:新 GCC 编译的程序依赖新版libstdc++.so.6,但系统/usr/lib64/libstdc++.so.6仍是旧版(如 GLIBCXX_3.4.19)。libstdc++-devel包只提供头文件,不替换运行时库。
  • 解决:安装libstdc++运行时包(非-devel):
    # 查找并安装 libstdc++-11.2.0 包 rpm -qlp libstdc++-11.2.0-1.el7.x86_64.rpm | grep so.6 # 输出:/usr/lib64/libstdc++.so.6.0.29 sudo rpm -Uvh libstdc++-11.2.0-1.el7.x86_64.rpm # 更新符号链接 sudo ln -sf /usr/lib64/libstdc++.so.6.0.29 /usr/lib64/libstdc++.so.6

4.4 现象:yum install gcc提示No package gcc available,但离线包明明存在

  • 原因:YUM 仓库元数据未更新,或createrepo生成的repodata/权限不足(非 root 用户生成时,repodata/目录属主为普通用户,YUM 无法读取)。
  • 解决:
    # 修复权限 sudo chown -R root:root /mnt/offline/gcc/repodata/ sudo chmod -R 755 /mnt/offline/gcc/repodata/ # 重建缓存 sudo yum clean all && sudo yum makecache

4.5 现象:在 ARM64 系统上安装 x86_64 RPM 包,rpm -ivh报package xxx is intended for a different architecture

  • 原因:架构不匹配。离线包必须与目标 CPU 架构严格一致(x86_64 vs aarch64 vs ppc64le)。
  • 解决:下载前确认架构:
    # 在目标机器上执行 uname -m # 输出 aarch64 表示 ARM64 # 下载时指定架构 dnf download --arch=aarch64 --resolve --destdir ./gcc-aarch64/ gcc gcc-c++

避坑总结:所有问题本质都是“环境假设偏差”——你以为系统有/bin/sh,其实没有;你以为binutils是配套的,其实版本锁死了;你以为libstdc++会随 GCC 自动升级,其实它是个独立包。离线安装不是复制粘贴,而是带着显微镜检查每一层依赖契约。


5. 验证与加固:用三重校验确保 GCC 离线环境坚如磐石

装完 GCC 只是起点,真正考验在于它能否在各种边界条件下稳定输出正确代码。我给自己定了一套铁律:任何离线环境部署后,必须通过以下三重校验,缺一不可。这套流程已在 37 个不同硬件平台(从 Intel Xeon 到飞腾 D2000)上验证通过。

5.1 校验一:ABI 兼容性快照(确认不会破坏现有程序)

新 GCC 安装后,最怕的是libstdc++.so.6升级导致旧程序崩溃。我们用readelf抓取 ABI 快照,与系统原版对比:

# 获取系统原版 libstdc++ ABI 符号表(备份) readelf -Ws /usr/lib64/libstdc++.so.6 | awk '{print $8}' | sort | uniq > /tmp/libstdc++-orig.abi # 获取新安装的 libstdc++ ABI 符号表 readelf -Ws /usr/lib64/libstdc++.so.6.0.29 | awk '{print $8}' | sort | uniq > /tmp/libstdc++-new.abi # 对比差异(应只有新增符号,无删除) diff /tmp/libstdc++-orig.abi /tmp/libstdc++-new.abi | grep "^>" # 正常输出类似:> _ZSt18get_money... (新增 C++17 符号) # 若出现 "< _ZSt17__throw_bad_alloc"(删除符号),则存在 ABI 不兼容风险,需回退

技巧说明:readelf -Ws提取动态符号表,$8是符号名字段。ABI 兼容性原则是“只增不减”——新库可以多出符号,但不能删掉旧程序依赖的符号。这个检查能在程序崩溃前 5 分钟预警。

5.2 校验二:交叉编译链自检(验证工具链闭环)

GCC 离线包是否完整?一个终极检验是让它自己编译自己。我们用gcc -dumpmachine获取目标三元组,再尝试编译一个极简 C 程序:

# 获取当前 GCC 目标平台(确认是 x86_64-redhat-linux) TARGET=$(gcc -dumpmachine) echo "Target triplet: $TARGET" # 创建自检脚本 check-gcc.sh cat > check-gcc.sh << 'EOF' #include <stdio.h> int main() { printf("GCC self-check: %s\n", __VERSION__); return 0; } EOF # 用当前 GCC 编译并运行 gcc -O2 check-gcc.sh -o check-gcc && ./check-gcc # 输出应为:GCC self-check: 11.2.0 # 清理 rm -f check-gcc.sh check-gcc

为什么有效?此步骤强制调用了cc1(C 前端)、as(汇编器)、ld(链接器)全部组件。若任一组件缺失(如漏装binutils),gcc命令会卡在as: command not found或ld: cannot find crti.o。

5.3 校验三:构建真实项目片段(模拟生产负载)

纸上谈兵终觉浅。我习惯用某跨平台系统的一个真实构建片段来压测:一个含 C++17 特性、OpenMP 并行、静态链接的微型 demo:

# 创建 omp-test.cpp cat > omp-test.cpp << 'EOF' #include <iostream> #include <omp.h> int main() { int sum = 0; #pragma omp parallel for reduction(+:sum) for (int i = 0; i < 1000; i++) { sum += i; } std::cout << "OpenMP sum: " << sum << std::endl; return 0; } EOF # 用新 GCC 编译(开启 OpenMP 和静态链接) gcc-11.2.0 -fopenmp -static-libgcc -static-libstdc++ omp-test.cpp -o omp-test # 检查是否真静态链接(无动态依赖) ldd omp-test || echo "Static linked: no dynamic libs found" # 运行 ./omp-test # 输出:OpenMP sum: 499500

参数深意:-fopenmp验证 OpenMP 运行时库libgomp是否就位;-static-libgcc -static-libstdc++强制静态链接,绕过libstdc++.so.6版本问题,直接验证 GCC 自身生成代码的能力。若此处失败,说明libgomp或libgcc离线包缺失。

5.4 终极加固:生成可复用的离线安装脚本

每次手动敲命令太脆弱。我把上述所有步骤封装成一个幂等脚本install-gcc-offline.sh,支持参数化版本和路径:

#!/bin/bash # install-gcc-offline.sh - GCC 离线安装自动化脚本 # 用法:./install-gcc-offline.sh --version 11.2.0 --arch x86_64 --distro centos7 --repo-dir /mnt/offline/gcc/ set -e # 任一命令失败即退出 VERSION="11.2.0" ARCH="x86_64" DISTRO="centos7" REPO_DIR="/mnt/offline/gcc" while [[ $# -gt 0 ]]; do case $1 in --version) VERSION="$2" shift 2 ;; --arch) ARCH="$2" shift 2 ;; --distro) DISTRO="$2" shift 2 ;; --repo-dir) REPO_DIR="$2" shift 2 ;; *) echo "Unknown option $1" exit 1 ;; esac done echo "Installing GCC $VERSION for $DISTRO ($ARCH) from $REPO_DIR" # 步骤1:创建本地仓库 sudo createrepo "$REPO_DIR" # 步骤2:写仓库配置 sudo tee /etc/yum.repos.d/gcc-offline.repo << EOF [gcc-offline] name=GCC Offline $VERSION baseurl=file://$REPO_DIR enabled=1 gpgcheck=0 EOF # 步骤3:安装 sudo yum clean all && sudo yum makecache sudo yum install -y "gcc-$VERSION*" "gcc-c++-$VERSION*" # 步骤4:设置默认链接 sudo ln -sf /usr/bin/gcc-$VERSION /usr/bin/gcc sudo ln -sf /usr/bin/g++-$VERSION /usr/bin/g++ echo "GCC $VERSION offline install completed successfully."

为什么值得写脚本?在某次金融客户项目中,我需要在 42 台同构服务器上部署,手动操作耗时 3 小时且出错 3 次(两次路径写错,一次忘记sudo)。脚本化后,for i in {1..42}; do scp install-gcc-offline.sh node$i:/tmp/ && ssh node$i 'bash /tmp/install-gcc-offline.sh --version 11.2.0'; done12 分钟全部完成,零错误。脚本不是偷懒,是把确定性刻进流程。

从那以后我每次交付离线环境,都强制走一遍这三重校验:ABI 快照保兼容、自编译链保闭环、真实项目压测保可用。不是为了炫技,而是因为曾经在凌晨三点,盯着一个segmentation fault的 core dump,翻了 7 小时日志才发现是libstdc++.so.6版本不匹配——而那个 ABI 差异,readelf早在安装后 10 秒就给出了答案。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询