linux gcc编译模式,在Linux中GCC详细模式输出说明

我是

Linux的新手.任何人可以向我解释我的hello world程序的以下详细模式输出?此外,文件crt1.o,crti.o,crtend.o,crtbegin.o和crtn.o和lc和lgcc会做什么?任何其他解释性的联系也是欢迎的.

$gcc -v hello.c

Reading specs from /usr/lib/gcc-lib/i686/3.3.1/specs

Configured with: ../configure --prefix=/usr

Thread model: posix

gcc version 3.3.1

/usr/lib/gcc-lib/i686/3.3.1/cc1 -quiet -v -D__GNUC__=3

-D__GNUC_MINOR__=3 -D__GNUC_PATCHLEVEL__=1

hello.c -quiet -dumpbase hello.c -auxbase hello -Wall

-version -o /tmp/cceCee26.s

GNU C version 3.3.1 (i686-pc-Linux-gnu)

compiled by GNU C version 3.3.1 (i686-pc-Linux-gnu)

GGC heuristics: --param ggc-min-expand=51

--param ggc-min-heapsize=40036

ignoring nonexistent directory "/usr/i686/include"

#include "..." search starts here:

#include <...> search starts here:

/usr/local/include

/usr/include

/usr/lib/gcc-lib/i686/3.3.1/include

/usr/include

End of search list.

as -V -Qy -o /tmp/ccQynbTm.o /tmp/cceCee26.s

GNU assembler version 2.12.90.0.1 (i386-Linux)

using BFD version 2.12.90.0.1 20020307 Debian/GNU

Linux

/usr/lib/gcc-lib/i686/3.3.1/collect2

--eh-frame-hdr -m elf_i386 -dynamic-linker

/lib/ld-Linux.so.2 /usr/lib/crt1.o /usr/lib/crti.o

/usr/lib/gcc-lib/i686/3.3.1/crtbegin.o

-L/usr/lib/gcc-lib/i686/3.3.1

-L/usr/lib/gcc-lib/i686/3.3.1/../../.. /tmp/ccQynbTm.o

-lgcc -lgcc_eh -lc -lgcc -lgcc_eh

/usr/lib/gcc-lib/i686/3.3.1/crtend.o

/usr/lib/crtn.o

第一部分是编译器驱动程序的版本和配置数据(这是gcc二进制文件,实际上并不是编译器本身):

Reading specs from /usr/lib/gcc-lib/i686/3.3.1/specs

Configured with: ../configure --prefix=/usr

Thread model: posix

gcc version 3.3.1

然后它打印它用来调用真正的编译器的命令cc1:

/usr/lib/gcc-lib/i686/3.3.1/cc1 -quiet -v -D__GNUC__=3

-D__GNUC_MINOR__=3 -D__GNUC_PATCHLEVEL__=1

hello.c -quiet -dumpbase hello.c -auxbase hello -Wall

-version -o /tmp/cceCee26.s

而cc1打印它的版本和配置信息.

GNU C version 3.3.1 (i686-pc-Linux-gnu)

compiled by GNU C version 3.3.1 (i686-pc-Linux-gnu)

GGC heuristics: --param ggc-min-expand=51

--param ggc-min-heapsize=40036

那么cc1会告诉你将搜索包含文件的目录.

ignoring nonexistent directory "/usr/i686/include"

#include "..." search starts here:

#include <...> search starts here:

/usr/local/include

/usr/include

/usr/lib/gcc-lib/i686/3.3.1/include

/usr/include

End of search list.

编译器现在完成了,所以gcc告诉你将使用的汇编器命令.

as -V -Qy -o /tmp/ccQynbTm.o /tmp/cceCee26.s

而汇编程序就给出了它的版本信息.

GNU assembler version 2.12.90.0.1 (i386-Linux)

using BFD version 2.12.90.0.1 20020307 Debian/GNU

Linux

汇编器现在完成,所以gcc给出了链接器命令.它使用collect2作为真正的链接器ld的中介,但这并不重要.

/usr/lib/gcc-lib/i686/3.3.1/collect2

--eh-frame-hdr -m elf_i386 -dynamic-linker

/lib/ld-Linux.so.2 /usr/lib/crt1.o /usr/lib/crti.o

/usr/lib/gcc-lib/i686/3.3.1/crtbegin.o

-L/usr/lib/gcc-lib/i686/3.3.1

-L/usr/lib/gcc-lib/i686/3.3.1/../../.. /tmp/ccQynbTm.o

-lgcc -lgcc_eh -lc -lgcc -lgcc_eh

/usr/lib/gcc-lib/i686/3.3.1/crtend.o

/usr/lib/crtn.o

链接器不提供详细的输出(尝试-Wl,-v),就是这样.

“crt”文件是指“C RunTime”.它们是在程序开始时插入的小部分代码,最后一节.他们负责初始化全局变量,堆和堆栈.从main返回后,它们调用atexit函数.另外还有一些.

希望有帮助.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值