美文网首页
C编译过程

C编译过程

作者: xiaoyanhan | 来源:发表于2016-10-31 17:24 被阅读24次

如果目标文件是由C代码编译生成的,整个程序的入口点是crt1.o中提供的_start,它首先做一些初始化工作(以下称为启动例程, Startup Routine),然后调用C代码中提供的main函数。所以,以前我们说main函数是程序的入口点其实不准确, _start才是真正的入口点,而main函数是被_start调用的。在gcc编译过程中,其默认的 链接过程

$ ld /usr/lib/crt1.o /usr/lib/crti.o main.o -o main -lc -dynamiclinker /lib/ld-linux.so.2
//也就是说,除了crt1.o之外其实还有crti.o,这两个目标文件和我们的main.o链接在一起生成可执行文件main。
 //-lc表示需要链接libc库,-dynamic-linker /lib/ld-linux.so.2指定动态链接器是/lib/ld-linux.so.2 

那么crt1.o和crti.o里面都有什么呢?我们可以用readelf命令查看。在这里我们只关心符号表,如果只看符号表,可以用readelf命令的-s选项,也可以用nm命令

C程序的链接过程如下
$ nm /usr/lib/crt1.o
00000000 R _IO_stdin_used
00000000 D __data_start
                U __libc_csu_finic  //U undefined
                U __libc_csu_init
                U __libc_start_main
00000000 R _fp_hw
00000000 T _start
00000000 W data_start
                U main$ nm /usr/lib/crti.o
                U _GLOBAL_OFFSET_TABLE_
                w __gmon_start__00000000 
              T _fini00000000 
                T _init
Paste_Image.png

相关文章

  • 【初识C语言】编译过程

    C语言编译过程 认识C编译执行过程,是C学习的开端。 我们来简单说C语言从编码编译到执行要经历一下过程: C源代码...

  • C编译过程

    如果目标文件是由C代码编译生成的,整个程序的入口点是crt1.o中提供的_start,它首先做一些初始化工作(以下...

  • java编译过程

    1、java编译过程与c/c++编译过程不同java编译程序将java源程序编译成jvm可执行代码--java字节...

  • C++编译过程

    C++ 编译过程在介绍编译器之前,先简单地说一下 C++ 的编译过程,以便理解编译器的工作。编译(compilin...

  • 【C++】gcc编译过程

    【C++】gcc编译过程 C++编译过程主要分为,预处理、编译、汇编、链接四个过程。如下图所示: 第一步:预处理 ...

  • C语言编译 - 编译过程

    一、C语言编译过程简介: 预处理:替换 编译:生成目标文件的汇编文件 汇编:生成目标文件的二进制文件 连接:生成可...

  • C语言编译过程详解

    C语言编译过程详解

  • 【C/C++】编译过程

    编写的C/C++源代码无法直接运行,需要转换成机器可以理解的可执行目标文件才能执行,这个转换的过程叫做编译与链接。...

  • 【C】C语言编译过程

    1,编译预处理(gcc -E main.c -o main.i) 文件包含复制 将源文件中一"#include"格...

  • c/c++编译过程

    1、一个C++源文件从文本到可执行文件经历的过程 预处理-->编译-->汇编-->链接 1.1预处理(产生.i文件...

网友评论

      本文标题:C编译过程

      本文链接:https://www.haomeiwen.com/subject/yqyputtx.html