当前位置: 首页 > news >正文

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

因为涉及到从远端下载文件,所以最好还是一步一步执行。如果获取 gcc-9.4.0.tar.gz 很慢,可以使用代理,或者找一台网速比较好的机器下载再上传。

./contrib/download_prerequisites是用来自动下载依赖库 GMP、MPFR 和 MPC的,对应的版本和地址是:

文件官方 URL
gmp-6.1.0.tar.bz2https://ftp.gnu.org/gnu/gmp/gmp-6.1.0.tar.bz2
mpfr-3.1.4.tar.bz2https://ftp.gnu.org/gnu/mpfr/mpfr-3.1.4.tar.bz2
mpc-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 7:

sudo 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 9:

sudo 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++ --version

4. 库和程序

不得不说,在信创系统上找一个靠谱的源来下载工具和库包还挺麻烦的,尤其是 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 的环

http://www.jsqmd.com/news/1099433/

相关文章:

  • 基于PI外环-FCS-MPC内环的永磁同步电机双环调速系统仿真分析(Simulink仿真实现)
  • GitLab开发流程实践
  • CSDN自动化测试_草稿
  • 【最新测评】有没有降AI率的靠谱网站推荐?2026年实测15款降AI神器,省钱又高效!
  • Go模块管理教程
  • C++继承与多态解析
  • 【Claude】Claude Code CLAUDE.md 记忆系统完全指南:让 AI 永远记得你的项目规范
  • 基于单片机智能点滴控制系统智能输液非接触式液位检测心率监测33(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • 临沂GEO技术应用与合规解析
  • 别再搞混了!JVM的Minor GC、Major GC、Full GC 到底有啥区别?
  • Java线程池使用指南
  • Java内存模型全面解析
  • 基于STM32单片机甲烷煤气天然气报警厨房安全火灾报警火焰物联网3(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • 04_C++控制结构
  • 【Claude】Claude Code 自定义斜杠命令完全指南:把重复提示词变成一键命令
  • 如何用UniversalUnityDemosaics轻松去除Unity游戏马赛克:免费完整指南
  • C++模板编程基础
  • 互动故事树 - 你的选择决定故事走向
  • Docker部署项目实践
  • Go协程Goroutine原理
  • Docker Compose详解
  • 终极NxNandManager指南:轻松管理你的Switch NAND存储
  • 基于51/STM32单片机智能马桶设计 久坐提醒 换气除臭 杀菌消毒33(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • C++文件操作详解
  • C++智能指针开发实践
  • 什么是 SIMD
  • Topit:让Mac窗口置顶的智能解决方案,告别窗口遮挡烦恼
  • M4Markets:技术架构的路径复盘
  • Windows本地安装Claude Desktop:API密钥配置与编程辅助实战指南
  • 文件的权限属性