gcc 编译升级

自己在用systemtap查找内存泄漏的时候,发现libstdc++.so.6.0.13没有debuginfo,无法跟中到堆栈,就选择自己编译gcc,版本和系统版本一致


1.准备安装包

gmp-4.3.2.tar.bz2

mpfr-2.4.2.tar.bz2

以上两个包为执行gcc包中的configure的时候所需要的,先安装gmp,再安装mpfr  下载地址(ftp://gcc.gnu.org/pub/gcc/infrastructure/)

gcc-4.4.7.tar.gz

2.解压gcc-4.4.7.tar.gz

3.创建一个路径,放编译gcc的中间文件

mkdir gcc-build

4.  cd gcc-build

5. ../gcc-4.4.7/configure --prefix=/home/gavin/mygcc --enable-threads=posix --disable-checking --disable-multilib --enable-languages=c,c++ --enable-cxx-flags="-g3 -O0"

6. make & make install


编译好的libstdc++.so.6.0.13在gcc-build/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.13路径下

### 关于 GCC 编译选项的使用说明 #### 基本概念 GCC 是 GNU Compiler Collection 的缩写,是一个广泛使用的开源编译器集合。它支持多种编程语言,并提供了丰富的命令行选项来控制其行为。 以下是几个常见的 GCC 编译选项及其功能: --- #### 多文件编译方式 对于多文件项目(例如 `func1.c` 和 `func2.c`),可以采用两种方式进行编译[^1]: - **一次性编译并链接** 使用单条命令完成编译和链接操作: ```bash gcc func1.c func2.c -o a.out ``` 此方法适用于小型项目,简单快捷。 - **分步编译与链接** 首先分别将源文件编译为目标文件 `.o`,然后再将其链接为可执行程序: ```bash gcc -c func1.c -o func1.o gcc -c func2.c -o func2.o gcc func1.o func2.o -o a.out ``` 这种方法适合大型项目,便于调试和管理。 --- #### 输出依赖关系 当需要生成 Makefile 中所需的依赖关系时,可以使用 `-M` 或 `-MM` 选项[^3]。例如: ```bash gcc -c -M t.c ``` 上述命令不会实际编译 `t.c` 文件,而是输出该文件所依赖的头文件列表至标准输出。如果希望忽略系统头文件,则应改用 `-MM` 选项。 --- #### 版本兼容性警告 在某些情况下,可能会遇到错误提示:“链接进来的库文件是由不同版本的 GCC 构建的”。这通常是因为目标平台上的库文件由其他版本的 GCC 创建,而当前 GCC 无法解析这些库中的 GIMPLE 数据结构[^2]。解决此问题的方法包括重新构建所需库或升级本地 GCC 至匹配版本。 --- #### Windows 平台下的 GCC 使用 为了在 Windows 上利用 GCC 工具链进行开发,需安装 MinGW 或 Cygwin 等工具集。具体配置流程可见相关博客文章[^4]。此外,在嵌入式领域如 STM32 开发中也常借助交叉编译GCC 完成固件制作。 --- #### 示例代码片段展示如何启用优化级别以及指定输出路径 下面是一段演示如何设置不同的优化等级并将最终二进制存储到特定目录的例子: ```bash mkdir build && cd build gcc ../src/main.c -O2 -Wall -o ./main_program ``` 此处参数解释如下: - `-O2`: 启动中级别的代码优化; - `-Wall`: 显示几乎所有的警告信息; - `-o`: 设定输出文件名; ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值