社区
C语言
帖子详情
关于编译,连接,定位
ytruyutyrruyuryyu
2006-04-30 03:39:24
连接和定位究竟是干什么的?特别是对于定位不了解.
...全文
213
8
打赏
收藏
关于编译,连接,定位
连接和定位究竟是干什么的?特别是对于定位不了解.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lovefreex
2006-05-01
打赏
举报
回复
好东西,顶一下
vsfan
2006-04-30
打赏
举报
回复
简单来说连接就是把编译好的二进制代码变为可以被操作系统识别并且载入运行的格式
比如如果你遵守COFF格式进行编译
那么不同的连接器理论上可以连接成为不同操作系统下的可执行文件
tb01412
2006-04-30
打赏
举报
回复
当你在程序中写上一个全局变量或者是一个函数时,这个定位过程会经历几个阶段:
1.在这个目标文件中的相对定位,一个目标文件中会此文件中的所有函数,变量进行符号描述,比如一个变量A,它所占的相对地址是多少?是全局的?或者是静态的,或者是外部的??
2.在连接多个目标成一个可执行文件时,会再次对这个变量进行重定位,也就是在这个可执行文件中进行对此变量进行描述,同目标文件中的描述差不多,只不过此变量不再有外部,内部之分,都成了本地变量,并且会将所有全局变量存放在一定的逻辑地址中,这是通过连接脚本文件与各个目标文件中的相对地址共同决定的
3.最终的操作系统加载这个可执行文件时,会对这些变量与函数地址再次进行重定位,其方式就是首先分析这个可执行文件中的不同段,读出相应的描述表,然后通过逻辑地址与物理地址进行映射出,最终就将可执行的二进制码加进了真实的物理内存了,关于分析可执行文件格式与物理地址的转换,不同的CPU与操作系统的实现方式会有不同之处
bo.cui
2006-04-30
打赏
举报
回复
DING~~ 谢谢! 还头一次听说 重定位
ChoiceYi
2006-04-30
打赏
举报
回复
运行时地址也就是EXE的相对地址吧?
angelanpan
2006-04-30
打赏
举报
回复
比如说两个编译后的可重定位目标文件obj1.o和obj2.o
在obj1.o里面定义了一个全局变量glob(在obj1里面记录了glob相对于该文件数据段的相对地址), 而obj2.0里面又引用了这个全局变量glob。
链接的重定位就是要确定在链接后的可执行程序中glob的地址,而不是相对于obj1的地址,从而使obj2也能通过地址调用glob。
当然重定位并不只是全局变量,还包括外部函数,指令等运行时地址的确定
bombwang
2006-04-30
打赏
举报
回复
麻烦把定位讲清楚一点
angelanpan
2006-04-30
打赏
举报
回复
编译器编译后产生的目标文件是可重定位的程序模块,并不能直接运行,链接就是把目标文件和其他分别进行编译生成的程序模块(如果有的话)及系统提供的标准库函数连接在一起,生成可运行的可执行文件的过程。
重定位是链接器在完成符号解析后(知道了各个输入模块的代码段和数据段的大小)的一个步骤,其作用顾名思义就是重新定位,确定比如指令,全局变量等在运行时的存储器地址。
Win-Masm v2.2 汇编集成
编译
器
界面的人性化设计,告别了在DOS平台下对汇编文件的编辑、
编译
、
连接
、运行等相关操作需要通过枯燥、繁琐并容易出错的命令敲打来完成的尴尬局面。一键
编译
/
连接
/运行/Debug的傻瓜式操作使得汇编爱好者能够更加专注于...
编译
链接 运行 重
定位
这几个概念
链接:将程序中
编译
生成的目标文件
连接
起来,并与系统提供的资源函数库链接成为一个整体,生产可执行文件。 运行:执行可执行文件。 重
定位
:把程序的逻辑地址空间转换成内存中实际物理地址空间的过程,也...
程序
编译
+
连接
的简单过程
1.程序的翻译环境和执行环境 在ANSI C的任何一种实现(
编译
器)中,存在两个不同的环境。 第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。...C语言源代码经过
编译
会生成一个目标文件,目标
编译
连接
的四步
2.
编译
链接的四步 (1)预
编译
: gcc -E main.c -o main.i (2)
编译
gcc -S main.i -o main.s (3)汇编 gcc -c main.s -o main.o (4)链接 gcc main.o -o main 执行: ./main 或者:全路径/main 3.
编译
链接的过程 ...
汇编程序基本结构+利用DOS系统
编译
连接
汇编程序
1.2 对源程序进行
编译
连接
使用汇编语言
编译
程序对源程序文件中的源程序进行
编译
,产生目标文件;再用
连接
程序对目标文件进行
连接
,生成可在操作系统中直接运行的可执行文件。 可执行文件包括两部分内容: 程序(从...
C语言
69,377
社区成员
243,075
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章