安装GCC教程

安装GCC-9.3.0全指导

一.安装准备

1_1下载GCC-9.3.0安装包*
手动下载辅助包,自动下载太慢,咱直接自己动手解决
ps:下载源精选国内清华源,速度无敌

wget https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-9.3.0/gcc-9.3.0.tar.gz

1_2 解压安装包

tar -xvf gcc-9.3.0.tar.gz

2 手动下载辅助包,自动下载太慢,咱直接自己动手解决
2_1进入GCC解压目录

cd gcc-9.3.0

2_2下载依赖版本gmp-6.1.0

wget https://mirrors.tuna.tsinghua.edu.cn/gnu/gmp/gmp-6.1.0.tar.xz

解压

tar -xvf gmp-6.1.0.tar.xz

改名成需要的目录名

mv gmp-6.1.0 gmp

2_3 下载依赖版本mpfr-3.1.4

wget https://mirrors.tuna.tsinghua.edu.cn/gnu/mpfr/mpfr-3.1.4.tar.gz

解压

tar -xvf mpfr-3.1.4.tar.gz

改名成需要的目录名

mv mpfr-3.1.4 mpfr

2_4 下载依赖版本mpc-1.0.3

wget https://mirrors.tuna.tsinghua.edu.cn/gnu/mpc/mpc-1.0.3.tar.gz

解压

tar -xvf mpc-1.0.3.tar.gz

改名成需要的目录名

mv mpc-1.0.3 mpc

二.安装编译
1 设置配置信息
建立编译目录,并进入

mkdir gcc-build

cd gcc-build

(/usr/local/gcc-9.3.0是新版本GCC的安装目录,可以更换,新手不推荐更换)

../configure --prefix=/usr/local/gcc-9.3.0 --disable-multilib --enable-languages=c,c++

2 编译
(小伙伴电脑有CPU多个核心时,推荐把“4”换成自己的核心数,这个过程需要时间多)

make -j 4

3 安装

make install -j 4

4 更新链接配置

 ln -s /usr/local/gcc-9.3.0 /usr/local/gcc

打开文件 sudo vim /etc/profile 输入一下指令

export PATH=/usr/local/gcc/bin:$PATH

export LD_LIBRARY_PATH=/usr/local/gcc/lib64

export MANPATH=/usr/local/gcc/share/man:$MANPATH

export CC=/usr/local/gcc/bin/gcc

export CXX=/usr/local/gcc/bin/g++

三.成果检验
gcc -v

使用内建 specs。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/gcc-9.1.0/libexec/gcc/x86_64-pc-linux-gnu/9.1.0/lto-wrapper
目标:x86_64-pc-linux-gnu
配置为:../configure --prefix=/usr/local/gcc-9.1.0 --disable-multilib --enable-languages=c,c++
线程模型:posix
gcc 版本 9.1.0 (GCC) 

cmake

-- The C compiler identification is GNU 9.3.0
-- The CXX compiler identification is GNU 9..0

NICE!!! 就是这么简单,从上到下,一步一步粘贴复制,GCC就装好啦

添加库文件问题处理
问题:缺少高版本的libstdc++.so的问题

apt: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21' not found need by xxx`

首先先查看/usr/lib/x86_64-linux-gnu/libstdc++.so.6这个库的信息

strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX

查询到的最高版本是GLIBCXX_3.4.19,缺少GLIBCXX_3.4.21
在其他系统中搜此版本的库文件

sudo find / -name "libstdc++.so.6*"

找到之后查看是否需要的版本

strings libstdc++.so.6 | grep GLIBCXX

ll查看它链接的具体库文件

ll libstdc++.so.6

查询到 libstdc++.so.6.0.21 (这个支持GLIBCXX_3.4.21),
将这个库拷贝到对应位置,建立软连接即可

cp /lib/libstdc++.so.6.0.21 /usr/lib64/
rm /usr/lib64/libstdc++.so.6
ln -s /usr/lib64/libstdc++.so.6.0.21 /usr/lib64/libstdc++.so.6
### GCC 9.3.0 宏展开报错解决方案 在使用 GCC 9.3.0 编译代码时,如果遇到宏展开相关的报错,通常是因为新版本的编译器对标准的严格性更高,或者旧代码中存在不兼容的语法或行为。以下是一些可能的原因及解决方法: #### 1. **检查宏定义的语法** 确保宏定义符合 C 或 C++ 标准的要求。例如,避免在宏定义中使用未初始化的变量或不符合语法规则的表达式。可以通过 `-Wall` 和 `-Wextra` 选项启用更多的警告信息,以帮助定位问题[^1]。 #### 2. **使用 `-fpermissive` 放宽编译规则** 如果宏展开导致了某些不严格的语法问题,可以尝试使用 `-fpermissive` 编译选项,允许编译器接受一些非标准但常见的代码写法。不过,这种方法仅适用于临时解决问题,建议后续修复代码以符合标准。 #### 3. **更新或调整宏定义** 如果宏定义中使用了已废弃的特性(如 `_base` 或 `_ptr`),需要根据最新的标准或库文档更新宏定义。例如,在处理 `FILE` 结构体时,GCC 9.3.0 可能不再支持直接访问某些成员变量,需改用标准函数替代[^2]。 #### 4. **禁用特定警告** 某些情况下,宏展开可能导致不必要的警告或错误。可以通过编译选项禁用特定警告。例如: ```bash gcc -Wno-unused-macros -Wno-unknown-pragmas ... ``` 这将忽略与未使用的宏或未知 pragma 相关的警告[^1]。 #### 5. **调试宏展开** 使用 `-E` 选项生成预处理后的文件,检查宏的实际展开结果。例如: ```bash gcc -E source.c -o source.i ``` 查看生成的 `source.i` 文件,确认宏展开是否符合预期[^1]。 #### 6. **代码示例** 假设宏定义如下: ```c #define BUFFER_SIZE(fp) (fp->_base - fp->_ptr) ``` 在 GCC 9.3.0 中,`_base` 和 `_ptr` 可能已被废弃。可以修改为: ```c #include <stdio.h> #define BUFFER_SIZE(fp) ((int)(ftell(fp))) ``` #### 7. **参考其他项目的经验** 如果遇到类似的报错,可以参考开源项目的解决方法。例如,在 OpenWrt 或 FFmpeg 的编译过程中,开发者可能已经解决了类似的问题[^4]。 --- ###
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值