为什么要链接?

eiceboy 2006-10-30 07:22:28
我们知道计算机只能执行机器指令,为什么它能运行用汇编语言和高级语言编写的程序?
答:靠汇编程序将汇编语言或高级语言翻译转换为目标程序(即机器语言)。
目标程序 即机器语言 可以用什么查看
obj文件用什么软件可以查看
一个可执行程序的产生过程是:编辑--编译--连接--执行---结果
链接是干什么的????与库函数的链接????是否是与程序头部的*.h文件链接,如果头部没有那么就不需要吗?
不是已经生成obj(机器语言)了,还要链接作什么?
如果需要了解这方面的信息该看什么书???
...全文
301 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
eiceboy 2006-10-30
  • 打赏
  • 举报
回复
谢谢 两位的解答
我现在去找linkers & loaders的书看看
hailongchang 2006-10-30
  • 打赏
  • 举报
回复
另外lann64(昆仑大鹏)说的linkers & loaders是这方面的权威著作

网上有翻译的,可以看看
hailongchang 2006-10-30
  • 打赏
  • 举报
回复
obj文件可以用dumpbin查看
你用dumpbin /symbols ***.obj
可以看到obj文件中使用的一些符号,其中有external标志的都是此刻obj这个文件本身没有定义的,都是引用的外部符号,所以需要别的obj或者是lib或者是dll等,而怎么把这些obj组织起来,就是linker的作用
lann64 2006-10-30
  • 打赏
  • 举报
回复
并非所有程序都必须link的,解释执行的程序、还有一些虚拟机上的程序、汇编里的.com格式程序都是可以不需要link的。
lann64 2006-10-30
  • 打赏
  • 举报
回复
楼主看看linker&loader这本书就明白了。
compiler仅仅把“高级语言”写的程序“翻译”成机器认识的目标码,但这些目标码怎么组织?入口点和出口点之间的地址对应,调用库函数的入口,在机器里跟实际内存间摆放关系等等都要linker程序安排。
另外,请注意,头文件处理是compiler的事,跟linker无关,link的时候已经没有头文件了,都是obj和lib类型的文件。
飞哥 2006-10-30
  • 打赏
  • 举报
回复
连接器(linker) 把多个目标文件组合成单个可执行目标模块。它一边创建可执行模块,一边完成重定位以及决定外部参考。连接器的输入是可重定位的目标文件和目标库文件,有关连接器的细节参见TMS320C54x最优化C编译器用户指南和汇编语言工具用户指南。
eiceboy 2006-10-30
  • 打赏
  • 举报
回复
我正在看http://www.mlxos.org/ linkers and loaders的中文翻译稿网站
很不错 十分不错

64,684

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧