zoukankan      html  css  js  c++  java
  • Linux中程序的编译和链接过程

    1、从源码到可执行程序的步骤:预编译、编译、链接、strip
    预编译:预编译器执行。譬如C中的宏定义就是由预编译器处理,注释等也是由预编译器处理的。
    编译: 编译器来执行。把源码.c .S编程机器码.o文件。
    链接: 链接器来执行。把.o文件中的各函数(段)按照一定规则(链接脚本来指定)累积在一起,
    形成可执行文件。
    strip: strip是把可执行程序中的符号信息给拿掉,以节省空间。(Debug版本和Release版本)
    objcopy:由可执行程序生成可烧录的镜像bin文件。

    2、程序段的概念:代码段、数据段、bss段(ZI段)、自定义段
    段就是程序的一部分,我们把整个程序的所有东西分成了一个一个的段,给每个段起个名字,然后在链接时就可以用这个名字来指示这些段。也就是说给段命名就是为了在链接脚本中用段名来让段站在核实的位置。

    段名分为2种:一种是编译器链接器内部定好的,先天性的名字;一种是程序员自己指定的、自定义的段名。
    先天性段名:
    代码段:(.text),又叫文本段,代码段其实就是函数编译后生成的东西
    数据段:(.data),数据段就是C语言中有显式初始化为非0的全局变量
    bss段:(.bss),又叫ZI(zero initial)段,就是零初始化段,对应C语言中初始化为0的全局变量。
    后天性段名:
    段名由程序员自己定义,段的属性和特征也由程序员自己定义。

  • 相关阅读:
    help python(查看模块帮助文档)
    Vim常用快捷键
    tar 解压缩
    目前的学习计划
    学习方向
    C#转Python计划
    困惑的屌丝,求方向。。。
    修改PYTHONPATH的一种方法(在Window平台和Ubuntu下都有效)
    使用正则表达式统计vs项目代码总行数[转]
    日常工作细节汇总
  • 原文地址:https://www.cnblogs.com/xing-ting/p/9687045.html
Copyright © 2011-2022 走看看