而 C++ 就是这种能自举的编程语言

📅 2026/7/1 1:29:39
而 C++ 就是这种能自举的编程语言
因为涉及到从远端下载文件所以最好还是一步一步执行。如果获取 gcc-9.4.0.tar.gz 很慢可以使用代理或者找一台网速比较好的机器下载再上传。./contrib/download_prerequisites是用来自动下载依赖库 GMP、MPFR 和 MPC的对应的版本和地址是文件官方 URLgmp-6.1.0.tar.bz2https://ftp.gnu.org/gnu/gmp/gmp-6.1.0.tar.bz2mpfr-3.1.4.tar.bz2https://ftp.gnu.org/gnu/mpfr/mpfr-3.1.4.tar.bz2mpc-1.0.3.tar.gzhttps://ftp.gnu.org/gnu/mpc/mpc-1.0.3.tar.gz也可以从其他能上网的机器如 Windows 笔记本下载以上 3 个文件然后传到信创机器上。注意 GMP、MPFR 和 MPC 必须解压在 GCC 源码根目录下并且创建同名软链接或直接重命名目录最终目录结构应类似/tmp/gcc-9.4.0/ ├── gmp → symlink to gmp-6.1.0/ ├── mpfr → symlink to mpfr-3.1.4/ ├── mpc → symlink to mpc-1.0.3/ ├── gmp-6.1.0/ (解压后的源码) ├── mpfr-3.1.4/ (解压后的源码) ├── mpc-1.0.3/ (解压后的源码) ├── configure └── contrib/编译选项--disable-bootstrap表示避免三阶段自举编译这样可以大幅缩短编译时间但也可能导致最终的 GCC 9 包含因 GCC 7 特定行为导致潜在问题。一般快速验证可以加上这个编译选项正式发布可以取消。3.2 切换那么现在系统中有 GCC 7 和 GCC 9 两个版本了最好配置 update-alternatives 实现切换。添加系统默认 GCC 7sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7.3.0 70 \ --slave /usr/bin/g g /usr/bin/g-7.3.0添加刚编译的 GCC 9sudo update-alternatives --install /usr/bin/gcc gcc /usr/local/gcc-9.4.0/bin/gcc 90 \ --slave /usr/bin/g g /usr/local/gcc-9.4.0/bin/g使用如下指令验证是否注册成功update-alternatives --list gcc应输出/usr/bin/gcc-7.3.0 /usr/local/gcc-9.4.0/bin/gcc交互式切换版本可输入如下指令sudo update-alternatives --config gcc会看到类似There are 2 programs which provide gcc. Selection Command ----------------------------------------------- * 1 /usr/local/gcc-9.4.0/bin/gcc 2 /usr/bin/gcc-7.3.0 Enter to keep the current selection[], or type selection number:输入2切回 GCC 7输入1切回 GCC 9。可再次输入指令当前生效版本gcc --version g --version4. 库和程序不得不说在信创系统上找一个靠谱的源来下载工具和库包还挺麻烦的尤其是 arm64 架构的。比如说我想安装 7z 压缩工具系统官方源没有openEuler 源也没有甚至 7z 官方也不提供 arm64 安装包。没有别的办法自己从源码进行构建吧。其实在 Linux 上构建程序还是挺简单的cd /root/work/program/ # 下载源码17.04 是目前广泛使用的稳定版本 wget https://github.com/p7zip-project/p7zip/archive/refs/tags/v17.04.tar.gz # 解压 tar -xzf v17.04.tar.gz cd p7zip-17.04 # 使用 7z makefile功能最全 make 7z # 安装到 /usr/local/bin 等标准路径 sudo make install至于一些常用的 C/C 依赖库包可以使用的是这个 BuildCppDependency 工具通过 Linux Shell 脚本离线安装。如果工具中没有自己想要的库那么就比较考验自己的 C 程序的构建水平了。可以参考笔者的系列文章——《CMake构建学习笔记-目录》另外 BuildCppDependency 工具中也有一些现成的脚本可供修改参考。最后需要注意的是因为 GCC 9 编译器是自己安装的但是在构建的时候可能并不会优先找到 GCC 9 的环