链接详解--多目标文件的链接
注: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命令查看。
链接详解--多目标文件的链接相关推荐
- Linux 链接详解----静态链接实例分析
由Linux链接详解(1)中我们简单的分析了静态库的引用解析和重定位的内容, 下面我们结合实例来看一下静态链接重定位过程. /* * a.c */ int a = 1000; void add(int ...
- php插入友情链接,PHP_详解WordPress中添加友情链接的方法,友情链接对于一个每个独立博 - phpStudy...
详解WordPress中添加友情链接的方法 友情链接对于一个每个独立博客来说可以说是必须的,有不少人选择在侧边栏加入友情链接栏目,但建立一个独立的友情链接页面也是一个不错的选择.用插件可以轻松做到这一 ...
- 详解WordPress中添加友情链接的方法
详解WordPress中添加友情链接的方法 友情链接对于一个每个独立博客来说可以说是必须的,有不少人选择在侧边栏加入友情链接栏目,但建立一个独立的友情链接页面也是一个不错的选择.用插件可以轻松做到这一 ...
- linux c 链接详解4-共享库
4. 共享库 4.1. 编译.链接.运行 组成共享库的目标文件和一般的目标文件有所不同,在编译时要加-fPIC选项,例如: $ gcc -c -fPIC stack/stack.c stack/pus ...
- C语言编译和链接详解(通俗易懂,深入本质)
我们平时所说的程序,是指双击后就可以直接运行的程序,这样的程序被称为可执行程序(Executable Program).在 Windows 下,可执行程序的后缀有.exe和.com(其中.exe比较常 ...
- C语言程序的编译+链接详解
文章目录 前言 一.引子 二.翻译环境 三.运行环境 总结 前言 同学们在写代码的时候,我们往往要先创建一个源文件比如test.c.写完具体代码并运行后,我们的文件夹中会生成一个test.exe的文件 ...
- 链接/装载/运行(3)-目标文件内容解析
声明:此内容是阅读<程序员的自我修养–链接,运行与库>而整理的学习笔记. 1 范例解析 1.1代码 /* SimpleSection.c** Linux: gcc -c SimpleSec ...
- linux rm命令参数及用法详解---linux删除文件或目录命令
http://www.linuxso.com/command/rm.html linux下rm命令使用详解---linux删除文件或目录命令 用户可以用rm命令删除不需要的文件.该命令的功能为删除一个 ...
- 技术揭秘之详解回收站删除文件恢复
|=------------------------------------------------------------------------=| |=--------------=[技术揭秘之 ...
最新文章
- PAT甲级1001.A+B Format(20)
- c+和python哪个快-python比c更快
- Excel电子表格的使用技巧!很实用
- 编程语言分类及python所属类型
- knn k的选取_KNN - 初窥K近邻算法
- HTTP协议和HTTPS协议
- 利用js排序html表格
- Spring已集成jsp的环境下同时集成Velocity
- 2021_0207_生活记录
- 苹果手机密码锁如何解锁
- 用matlab数学建模报告,Matlab数学建模实验报告.doc
- 电路图精简版(web内置画图软件)
- 转!!以太网方案设计
- 云计算导论第二章习题总结
- 数据传输速率:传码速率(波特率)、传信速率(比特率)
- 2017 icpc 西安赛区 B.Coin(推公式+二项式定理)
- Spring Boot SSL证书验证的问题
- 线上打假遭遇多重困境 专家建言依靠“大数据”打假
- Python模拟财富分配实验
- 前端 银行卡格式化js