GCC编译过程详细记录

升级GCC

先把gcc升级到当前yum源中的最新版本

yum update -y gcc*
yum install -y glibc-headers
yum install -y gcc-c++ libstdc++-static ant cmake byacc flex automake libtool binutils-devel bison ncurses-devel gcc kernel-devel libtool libatomic

glibc-headers和gcc-c++再编译源码中回用的,如果不安装会报“error: C++ preprocessor “/lib/cpp” fails sanity check”。

下载GCC源码

我编译的是 gcc-10.2.0.tar.gz,可以从这里下载:
链接:https://pan.baidu.com/s/1Xo3uzDcJ9uA0c6KMMjkdmw
提取码:c049

安装

解压

将 gcc-10.2.0.tar.gz 放到 /usr/local/ 目录下并解压。

tar -zxvf gcc-10.2.0.tar.gz

解压完之后/usr/local/目录下回出现 gcc-10.2.0 这个文件夹

### 如何让 GCC 显示详细编译过程信息 GCC 提供了一个 `-v` 选项,用于显示详细编译过程信息。当使用该选项时,GCC 将打印出其内部操作的详细流程,包括所使用的工具链路径、标准库路径以及各个阶段的具体命令[^3]。 例如,在编译一个简单的 C 文件 `foo.c` 时,可以通过如下方式启用详细日志输出: ```bash gcc -v foo.c -o foo ``` 此命令会展示整个编译过程中涉及的所有步骤,从预处理到最终链接的过程都将被记录并输出至终端。此外,如果希望进一步分析具体的中间产物(如 `.i` 或 `.s` 文件),还可以结合其他选项来观察每一步的结果。比如: - 使用 `-E` 只进行预处理,并生成预处理后的文件。 - 使用 `-S` 停留在汇编阶段,生成汇编代码文件。 - 使用 `-c` 仅完成编译和汇编,生成目标文件而不进行链接。 下面是一个完整的例子,演示如何逐步查看编译的不同阶段: #### 示例:分步编译与调试 假设有一个源文件 `main.c` 和另一个模块 `helper.c`,可以按以下方式进行分步编译: 1. **预处理阶段** ```bash gcc -E main.c -o main.i ``` 2. **编译为汇编代码** ```bash gcc -S main.i -o main.s ``` 3. **汇编为目标文件** ```bash gcc -c main.s -o main.o ``` 4. **链接多个对象文件** 如果还有其他模块(如 `helper.c`),先将其单独编译为目标文件: ```bash gcc -c helper.c -o helper.o ``` 然后再将两者链接为可执行文件: ```bash gcc main.o helper.o -o final_program ``` 通过上述方法,不仅可以清晰地看到每一阶段产生的中间文件,还能更好地定位潜在问题所在。 另外需要注意的是,在实际项目中可能还会遇到条件编译的情况。这种情况下,合理利用宏定义可以帮助开发者根据不同环境定制化构建逻辑[^2]。 最后提醒一点,虽然 GCC 的默认行为不会总是给出详尽反馈,但借助 `-Wall`, `-Wextra` 这类警告增强标志能够有效捕获更多隐含错误或不良习惯带来的隐患;而像 LTO (Link Time Optimization) 技术则可以在后期优化期间提供更多关于性能改进方面的建议[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高晓伟_Steven

相逢即是有缘,动力源于金钱。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值