gcc工具链杂记

本文详细介绍了GCC工具链的使用,包括查看编译器版本、预定义宏、默认链接脚本,以及如何查看优化选项和处理符号冲突。通过实例展示了如何检查编译器的配置和操作,为开发者提供实用的GCC操作指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 查看编译器的版本

[/path/to/]gcc  --version

2. 查看编译器预定义的宏

[/path/to/]gcc  [options] -dM  -E  - <<<''


3. 默认链接脚本

 [/path/to/]ld --verbose

根据输出,可以得到链接相关的信息。

例如,对于Linux PC机上的gcc工具链,可以得到类似如下的链接相关的信息。

OUTPUT_ARCH(i386)
ENTRY(_start)
SEARCH_DIR("/usr/i686-redhat-linux/lib"); SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/lib"); SEARCH_DIR("/usr/lib");
SECTIONS
{
  /* Read-only sections, merged into text segment: */
  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x08048000)); . = SEGMENT_START("text-segment", 0x08048000) + SIZEOF_HEADERS;
  .interp        : { *(.interp) }
  .note.gnu.build-id : { *(.note.gnu.build-id) }
  .hash          : { *(.hash) }
  .gnu.hash      : { *(.gnu.hash) }
  .dynsym        : { *(.dynsym) }
  .dynstr        : { *(.dynstr) }
  .gnu.version   : { *(.gnu.version) }
  .gnu.version_d : { *(.gnu.version_d) }


3.  查看二级优化选项执行了哪些优化

[path/to/]gcc -Q -O2 --help=optimizers

输出类似如下内容

The following options control optimizations:
  -O<number>                  
  -Os                         
  -falign-functions                     [enabled]
  -falign-jumps                         [enabled]
  -falign-labels                        [enabled]
  -falign-loops                         [disabled]
  -fargument-alias                      [enabled]
  -fargument-noalias                    [disabled]
  -fargument-noalias-anything           [disabled]
  -fargument-noalias-global             [disabled]
  -fasynchronous-unwind-tables          [enabled]


4. 查看编译器实际使用了哪些选项

touch test.c

[path/to/]gcc  [options] -fverbose-asm  -S  test.c

cat   test.s


5. 链接时允许符号冲突

有时候同一个程序使用了多个静态库,而多个库中的不同.o文件都需要链接到可执行程序中。

然而,这些.o文件有符号名的冲突。怎么办呢?

在链接命令中,使用 --allow-multiple-definition这个选项即可(可以将他追加到LDFLAGS中)。

当然,这是非常危险的。因为不同的地方,对此符号是怎么定义的,怎么使用的,都不清楚。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值