美文网首页
编译和链接

编译和链接

作者: firsTime | 来源:发表于2017-08-13 16:39 被阅读0次

       作为刚毕业没多久的非计算机学院出身的工科生,误打误撞的变成一个程序猿,因基础知识很薄弱,在此记录一些学习的过程。

在项目开发过程中,经常遇到一些编译链接的问题,对此一知半解的,查阅一些资料,记录一下。
当我们写了一段简单的C程序时,怎么让他变成可执行的文件的过程,就是编译和链接。编译的过程可分为几个步骤:

1、 预处理,我们在程序写程序的过程中,经常会用到一些预处理的指令,比如:#define #ifdef #else #endif 等等。这些预处理指令会在预处理阶段被替换成实际的代码。

2、 编译,检查和校验预处理之后的代码,将其翻译成汇编代码;再通过汇编器生成中间目标文件(.o / .obj)。大部分程序编写出错都会出现在这个阶段。(在此建议告警也一并消除,能避免很多问题)。

3、 链接,主要是链接函数和全局变量及一些定义的静态变量;如果需要调用静态库或者动态库的情况,也会在此时链接(动态库还需分情况),最后会生成一个可执行文件,此文件就可以运行了。主要完成了地址和空间的分配。

程序生成可执行文件时,会按照上图方式区分:代码指令本身会在代码段,正常情况下,可读不可写。堆、栈的大小会在程序执行时动态调整。静态或者全局变量已初始化的会在数据段;未初始化的静态或全局变量被分配再bss段;数据段和bss段是静态内存分配。Bss段只记录了变量的大小,未占用文件空间,是在程序执行时分配的,由系统初始化。bss段在初始化时,内存会被清0,而在堆栈上分配的内存或者局部变量创建时,该值不一定为0。

相关文章

  • 编译和链接

    编译和链接 预处理 编译 汇编 链接 预处理(prepress) 处理#开头的预编译指令。 #include:包含...

  • 编译和链接

    作为刚毕业没多久的非计算机学院出身的工科生,误打误撞的变成一个程序猿,因基础知识很薄弱,在此记录一些学习的过程。...

  • 编译和链接

    (摘自《程序员的自我修养》) 1. 被隐藏了的过程   当我们使用gcc来编译一个程序时,例如   运行结束后会生...

  • 编译和链接

    摘自《程序员自我修养》 对于平时的应用程序开发,我们很少关注编译和连接过程,因为通常的开发环境都是流行的集成开发环...

  • xcode 编译 系统 深入学习(2)(待续)

    编译(通常我们说的编译包括编译和链接)报错 知识要点: 我们知道编译型语言,源文件必须经过编译(build)和链接...

  • 二、编译和链接

    1. 源代码(hello.c) 2. 预编译过程 $ gcc -E hello.c -o hello.i 预编译过...

  • 二、编译和链接

    1. 编译的四个步骤 预处理(Propressing)编译(Compilation)汇编(Assembly)链接(...

  • 2 编译和链接

    第二章 编译和链接词法分析语法分析语义分析中间语言生成目标代码生成与优化链接器 第二章 编译和链接 平时我们使用的...

  • 编译

    编译和链接 编译过程 预编译 生成.i 文件 不包含任何宏定义,宏被展开 编译 汇编 链接 编译器做了什么 词法分...

  • 第二部分-静态链接

    一、编译和链接 1、构建:IDE一般都将编译和链接的过程一步完成,通常将这种编译和链接合并到一起的过程称为构建; ...

网友评论

      本文标题:编译和链接

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