预编译,编译,汇编,链接,静态库,动态库都是什么

预编译:
预编译又称为预处理,是做一些代码文本的替换工作
将头文件展开,取消注释,替换所有宏定义的符号

编译:
将文件进行词法分析,语法分析,语义分析,符号汇总后,将代码翻译为汇编语言(汇编语言就是MOV,ADD之类的东西)

汇编:
将文件转换为二进制文件即目标文件,每一个源文件对应一个目标文件,在windows中目标文件的后缀为.obj

链接:
其实就是一个“打包”的过程,它将所有二进制形式的目标文件和系统组件组合成一个可执行文件。完成链接的过程也需要一个特殊的软件,叫做链接器。

在完成汇编后,各个目标文件还没有“联系”起来,一个目标文件中使用的函数或变量,可能定义在其他的目标文件中,也可能定义在某个链接库文件中。对于各个目标文件中缺失的函数和变量的存储地址,会在链接阶段由链接器,并最终将所有的目标文件和链接库组织成一个可执行文件。在windows下这个可执行文件后缀为.exe。

链接库:
所谓链接库,就是将一些源文件进行编译,打包后得到的二进制文件。虽然链接库是二进制文件,但无法独立运行,必须等待其它程序调用,才会被载入内存。库文件往往带有一个头文件,方便需要链接这个库的程序查看如何调用。链接库分为静态库和动态库两种。

静态库:
Windows中后缀名为.lib。静态库在编译是会直接整合到目标程序中,所打包出来的文件可以独立运行在任何地方。利用静态函数库编译成的文件会比较大,如果这个静态库由更新,就需要重新编译。

动态库:
windows中后缀名为.dll。动态库在编译的时候不会被整合到目标程序中,生成的可执行文件无法单独运行。所以编译链接后的文件中仍然有变量和函数的缺失,这些缺失会在程序运行的时候被修补。具体来讲,对于一个以动态链接方式运行的项目,首先由静态链接器将所有的目标文件组织成一个可执行文件,运行时才会将所需的动态链接库全部载入内存,由动态链接器完成可执行文件和动态库文件的链接工作。
动态链接库可以随可执行文件一同载入内存,也可以在可执行文件运行过程中载入,即可执行文件什么时候需要,动态链接库才会载入内存。

对于不同的库,链接器在链接阶段所做的工作是不同的。
对于静态库,链接器会逐个找到各目标文件中缺失的地址。采用此链接方式生成的可执行文件,可以独立载入内存运行。
对于动态库,链接器先从所有目标文件中找到部分缺失的地址,然后将所有目标文件组织成一个可执行文件。如此生成的可执行文件,仍缺失部分函数和变量的地址,待文件执行时,需连同所有的链接库文件一起载入内存,再由链接器完成剩余的地址修复工作,才能正常执行。

参考链接:
https://blog.csdn.net/yao00037/article/details/120166233
http://c.biancheng.net/dll/what_is_library.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值