【系统软件02】源码离线安装gcc

news/2024/11/29 22:48:46/

【系统软件02】源码离线安装gcc

  • 一、下载、编译、安装
  • 二、设置环境变量
  • 三、设置头文件
  • 四、重新加载动态链接库
  • 五、cmake使用的是旧版gcc?
  • 六、libstdc++.so.6:version'GLIBCXX_3.4.21'not find
  • 七、libjvm.so找不到,需要在ld.so.conf.d中增加java库的路径
  • 八、GCC相关
    • 1、GCC常用选项
    • 2、GCC的扩展功能
    • 3、GCC的调试工具
    • 4、学习资源推荐

一、下载、编译、安装

  1. 下载 gcc-4.9.0.tar.bz2
wget https://mirrors.ustc.edu.cn/gnu/gcc/gcc-9.3.0/gcc-9.3.0.tar.gz
  1. 解压
tar -zxvf gcc-9.3.0.tar.gz
  1. 进入gcc-4.9.0目录
cd gcc-4.9.0
  1. 下载所需
./contrib/download_prerequisites

可以看到一共下载了这四个所需的软件gmp-6.1.0.tar.bz2、mpfr-3.1.4.tar.bz2、mpc-1.0.3.tar.gz、isl-0.18.tar.bz2。

[root@localhost gcc-9.3.0]# ./contrib/download_prerequisites
2023-06-26 20:03:47 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2 [2383840] -> "./gmp-6.1.0.tar.bz2" [1]
2023-06-26 20:05:30 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2 [1279284] -> "./mpfr-3.1.4.tar.bz2" [1]
2023-06-26 20:06:18 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz [669925] -> "./mpc-1.0.3.tar.gz" [1]
2023-06-26 20:08:20 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2 [1658291] -> "./isl-0.18.tar.bz2" [1]
gmp-6.1.0.tar.bz2: OK
mpfr-3.1.4.tar.bz2: OK
mpc-1.0.3.tar.gz: OK
isl-0.18.tar.bz2: OK
All prerequisites downloaded successfully.
[root@localhost gcc-9.3.0]# 
  1. 创建build目录、进入build目录
 mkdir build && cd build
  1. configure
../configure --prefix=/usr/local/gcc-9.3.0 --enable-checking=release --enable-languages=c,c++ --disable-multilib
  1. 编译、安装
make -j16 && sudo -j16 make install

管理员权限安装

二、设置环境变量


[dev1@localhost ~]$ sudo vi /etc/profile.d/gcc.sh
export PATH=/usr/local/gcc/bin:$PATH
[dev1@localhost ~]$ source /etc/profile.d/gcc.sh

三、设置头文件

sudo ln -sv /usr/local/gcc-9.3.0/include/ /usr/include/gcc

四、重新加载动态链接库

  • 增加动态链接库路径
touch /etc/ld.so.conf.d/gcc.conf
sudo chmod 777 /etc/ld.so.conf.d/gcc.conf
sudo echo -e "/usr/local/gcc-9.3.0/lib64">>/etc/ld.so.conf.d/gcc.conf
  • 重新加载动态链接库
sudo ldconfig -v
ldconfig -p |grep gcc

五、cmake使用的是旧版gcc?

这时系统使用的是系统自带的旧版本的gcc,解决方案如下

  • 把系统自带的备份
cd usr/bin
mv gcc gcc.bak
mv g++ g++.bak
mv c++ c++.bak
mv cc cc.bak
mv cpp cpp.bak
mv gcc-nm gcc-nm.bak
mv gcc-ar gcc-ar.bak
mv gcc-ranlib gcc-ranlib.bak
  • 建立软链接gcc、g++、c++
ln -sv /usr/local/gcc-9.3.0/bin/gcc /usr/bin/gcc
ln -sv /usr/local/gcc-9.3.0/bin/g++ /usr/bin/g++
ln -sv /usr/local/gcc-9.3.0/bin/c++ /usr/bin/c++
ln -sv /usr/local/gcc-9.3.0/bin/cc /usr/bin/cc
ln -sv /usr/local/gcc-9.3.0/bin/cpp /usr/bin/cpp
ln -sv /usr/local/gcc-9.3.0/bin/gcc-nm /usr/bin/gcc-nm
ln -sv /usr/local/gcc-9.3.0/bin/gcc-ar /usr/bin/gcc-ar
ln -sv /usr/local/gcc-9.3.0/bin/gcc-ranlib/usr/bin/gcc-ranlib

六、libstdc++.so.6:version’GLIBCXX_3.4.21’not find

把原来的备份,重新生成软连接。

cd /usr/lib64/
mv libstdc++.so.6 libstdc++.so.6.bak
ln -sv /usr/local/gcc-9.3.0/lib64/libstdc++.so.6.0.28 /usr/lib64/libstdc++.so.6

七、libjvm.so找不到,需要在ld.so.conf.d中增加java库的路径

解决方案:同《 四、重新加载动态链接库》,把所在库的路径加入到ld.so.conf.d

八、GCC相关

1、GCC常用选项

  1. 调试选项
  • -g:生成调试信息。
  • -Og:仅进行基本优化,同时保留较好的调试能力。
  1. 优化选项
  • -O0:不进行优化。
  • -O1:进行基本优化。
  • -O2:进行更多优化。
  • -O3:进行更高级的优化。
  1. 其他常用选项
  • -Wall:启用警告信息。
  • -std=c11:使用C11标准。
  • -std=c++17:使用C++17标准。

2、GCC的扩展功能

  1. 静态库和动态库
  • gcc -c:编译源文件生成目标文件。
  • gcc -shared:生成动态库。
  • gcc -static:生成静态库。
  1. 多文件编译
  • gcc file1.c file2.c -o output:将多个源文件编译为一个可执行文件。
  1. 调用外部库
    gcc main.c -lm:调用数学库。

3、GCC的调试工具

  • GDB(GNU Debugger):用于调试程序,提供断点调试、变量查看等功能。

4、学习资源推荐

  • GCC官方文档:https://gcc.gnu.org/onlinedocs/
  • GNU Make教程:http://www.ruanyifeng.com/blog/2015/02/make.html

参考
黑猴子的家:Centos 7.x gcc 4.8.5 升级到 gcc 4.9.4
源码安装GCC-4.9.2


http://www.ppmy.cn/news/1011141.html

相关文章

Stephen Wolfram:ChatGPT 的训练

The Training of ChatGPT ChatGPT 的训练 OK, so we’ve now given an outline of how ChatGPT works once it’s set up. But how did it get set up? How were all those 175 billion weights in its neural net determined? Basically they’re the result of very large…

机器学习笔记 - 基于Python发现最佳计算机视觉模型的神经架构搜索技术NAS

一、简述 近年来,随着深度学习技术的兴起,计算机视觉领域取得了巨大进步。事实证明,卷积神经网络 (CNN) 在图像识别任务中异常强大,但针对特定问题设计最佳架构仍然是一项具有挑战性的任务。这就是神经架构搜索(NAS)发挥作用的地方。NAS 是一种尖端技术,可以自动发现高性…

ubuntu添加万能头文件

ubuntu的C头文件目录为/usr/include 在/usr/include下新建文件夹 bits sudo mkdir bits进入bits,新建stdc.h,并修改权限为744/777 cd bits;sudo touch stdc.h;sudo chmod 777 stdc.h将以下内容粘贴到stdc.h,保存退出 // C includes used …

流数据湖平台Apache Paimon(六)集成Spark之DML插入数据

文章目录 4.4. 插入数据4.5. 查询数据4.5.1 时间旅行4.5.2 增量查询 4.6 系统表4.6.1 快照表 Snapshots Table4.6.2 模式表 Schemas Table4.6.3 选项表 Options Table4.6.4 审计日志表 Audit log Table4.6.5 文件表 Files Table4.6.6 标签表 Tags Table 4.4. 插入数据 INSERT …

【ROS2】ROS2的框架知识

一、说明 对于初学ROS的同学,如果没有有效的学习规划,那么不妨看看该文,在这里,我们将对ROS2出现的知识板块进行介绍,期望对初识ROS2的同学起到导航作用。 二、ROS2的优势所在 2.1 ROS1的不足 ROS1项⽬的初衷是为了给…

Leetcode-每日一题【剑指 Offer 56 - II. 数组中数字出现的次数 II】

题目 在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。 示例 1: 输入:nums [3,4,3,3]输出:4 示例 2: 输入:nums [9,1,7,9,7,9,7]输出:1 限制…

C语言错题之 8

前言: 今天依然是五道小题,都不难,主要是一些细节的知识。 这选择题做的真是让我大开眼界,长见识了(🤦‍) 1. 题干: 点击此处跳转 答案: ABCD 解析: …

无人驾驶实战-第八课(定位算法)

无人驾驶中定位的作用: 定位高精度地图:提供当前位置的静态环境感知 (车道线/交通指示牌/红绿灯/柱子/建筑物/等) 定位动态物体感知:将感知到的动态物体正确放入静态环境 定位获取位置姿态:用于路径规划/决…