注:1. 可用nm查看文件符号表。

2. 可用readelf -a main查看elf格式文件。

3. bss段:未初始化的数据,block storage start,或better save apace。

以下列程序为例说明:

/* stack.c */

char stack[512];

int top = -1;

void push (char c)

{

  stack[++top] = c;

}

char pop(void)

{

  return stack[top--];

}

int is_empty(void)

{

  return top == -1;

}

/* main.c */

#include <stdio.h>

int a, b=1;

int main(void)

{

  push('a');

  push('b');

  push('c');

  while(!is_empty()){

    putchar(pop());

  }

  putchar('\n');

  

  return 0;

}

编译过程:gcc main.c stack.c -o main

gcc -c  main.c

gcc -c stack.c

gcc main.o stack.o -o main

main.o包含.bss段:a,.data段:b,.text段:main

stack.o包含.bss段:stack,.data段:top,.text段:push,pop,is_empty

main:包含.bss段:a, stack,.data段:b, top,.text段:main,push,pop,is_empty

main中每个段中来自main.o的变量或函数放在前面,是有gcc的链接顺序决定的。当gcc stack.o main.o -o main时stack相关变量和函数放在main前面。

链接过程是由一个链接脚本(linker script)控制的,链接脚本决定了给每个段分配什么地址,如何对齐,哪个段在前,哪个段在后,哪些段合并到同一个segment,

此外链接脚本还要插入一些符号到最终生成的文件中,例如_bss_start、_edata、_end等。

如果用ld做链接时没有用-T选项指定链接脚本,则使用ld的默认链接脚本,默认链接脚本可以用ld --verbose命令查看。

链接详解--多目标文件的链接相关推荐

  1. Linux 链接详解----静态链接实例分析

    由Linux链接详解(1)中我们简单的分析了静态库的引用解析和重定位的内容, 下面我们结合实例来看一下静态链接重定位过程. /* * a.c */ int a = 1000; void add(int ...

  2. php插入友情链接,PHP_详解WordPress中添加友情链接的方法,友情链接对于一个每个独立博 - phpStudy...

    详解WordPress中添加友情链接的方法 友情链接对于一个每个独立博客来说可以说是必须的,有不少人选择在侧边栏加入友情链接栏目,但建立一个独立的友情链接页面也是一个不错的选择.用插件可以轻松做到这一 ...

  3. 详解WordPress中添加友情链接的方法

    详解WordPress中添加友情链接的方法 友情链接对于一个每个独立博客来说可以说是必须的,有不少人选择在侧边栏加入友情链接栏目,但建立一个独立的友情链接页面也是一个不错的选择.用插件可以轻松做到这一 ...

  4. linux c 链接详解4-共享库

    4. 共享库 4.1. 编译.链接.运行 组成共享库的目标文件和一般的目标文件有所不同,在编译时要加-fPIC选项,例如: $ gcc -c -fPIC stack/stack.c stack/pus ...

  5. C语言编译和链接详解(通俗易懂,深入本质)

    我们平时所说的程序,是指双击后就可以直接运行的程序,这样的程序被称为可执行程序(Executable Program).在 Windows 下,可执行程序的后缀有.exe和.com(其中.exe比较常 ...

  6. C语言程序的编译+链接详解

    文章目录 前言 一.引子 二.翻译环境 三.运行环境 总结 前言 同学们在写代码的时候,我们往往要先创建一个源文件比如test.c.写完具体代码并运行后,我们的文件夹中会生成一个test.exe的文件 ...

  7. 链接/装载/运行(3)-目标文件内容解析

    声明:此内容是阅读<程序员的自我修养–链接,运行与库>而整理的学习笔记. 1 范例解析 1.1代码 /* SimpleSection.c** Linux: gcc -c SimpleSec ...

  8. linux rm命令参数及用法详解---linux删除文件或目录命令

    http://www.linuxso.com/command/rm.html linux下rm命令使用详解---linux删除文件或目录命令 用户可以用rm命令删除不需要的文件.该命令的功能为删除一个 ...

  9. 技术揭秘之详解回收站删除文件恢复

    |=------------------------------------------------------------------------=| |=--------------=[技术揭秘之 ...

最新文章

  1. PAT甲级1001.A+B Format(20)
  2. c+和python哪个快-python比c更快
  3. Excel电子表格的使用技巧!很实用
  4. 编程语言分类及python所属类型
  5. knn k的选取_KNN - 初窥K近邻算法
  6. HTTP协议和HTTPS协议
  7. 利用js排序html表格
  8. Spring已集成jsp的环境下同时集成Velocity
  9. 2021_0207_生活记录
  10. 苹果手机密码锁如何解锁
  11. 用matlab数学建模报告,Matlab数学建模实验报告.doc
  12. 电路图精简版(web内置画图软件)
  13. 转!!以太网方案设计
  14. 云计算导论第二章习题总结
  15. 数据传输速率:传码速率(波特率)、传信速率(比特率)
  16. 2017 icpc 西安赛区 B.Coin(推公式+二项式定理)
  17. Spring Boot SSL证书验证的问题
  18. 线上打假遭遇多重困境 专家建言依靠“大数据”打假
  19. Python模拟财富分配实验
  20. 前端 银行卡格式化js

热门文章

  1. 怎么快速插入 100 条数据,用时最短
  2. 一行代码,得到最强时序基线!
  3. 天大本科生论文入选CVPR 2022,实现深度学习长尾分类新SOTA
  4. 985高校挖出古墓!网友:毕业论文自己找上门来了
  5. 华为,再牵手一流大学
  6. 劝你别把开源的AI项目写在简历上了!!!
  7. 9 行代码提高少样本学习泛化能力,代码已开源
  8. 当支持向量机遇上神经网络:这项研究揭示了SVM、GAN、Wasserstein距离之间的关系...
  9. 伯克利在《我的世界》举办虚拟毕业典礼,致辞、抛礼帽一样不少!
  10. python3.5全局解释器锁GIL-实现原理浅析