标签:源代码编译 静态链接 程序启动 使用 时间 动态链接库 就会 需要 空间
lib,dll这两样东西在许多编程书中都很少出现,但实际工程中,这两样东西的作用确实非常重要,我觉得c++程序员都有必要了解这两样东西。
首先总共有 动态链接 和 静态链接 这两种链接方式
静态链接使用静态链接库lib,且只在源代码编译时用到(编译期)。
编译生成静态库时会生成一个.lib文件
.lib里面装载了各种类,函数的实现。
这种静态链接的lib实际上是多个obj文件的集合。
在实际工程中,往往各模块的规模庞大(一堆.h .cpp文件)
而编译时,每个.cpp对应生成.obj文件,一个模块生成一堆obj文件,瞬间把文件夹塞满,造成维护的不便性
为了解决这问题,可以将每个主要模块先编译成一个.lib文件,再使用静态链接的方法,在编译期将各模块的.lib的文件链接起来。
动态链接使用动态链接库dll,且只在程序启动时用到(运行期)
编译生成动态链接库时会生成一个.dll文件和一个.lib文件
.dll存放了各函数,.exe刚开始运行时就会动态链接上所需的.dll文件(运行期)
.lib则一般是一些索引信息,记录了dll中函数的入口和位置(跟静态链接库的lib不同),不过仍然只在编译期用到(编译期)
由于.dll存放了各函数,.exe里无需再存放.dll已含有的函数,只需调用时存放相应的函数地址,这样可以将.exe的空间大小转移一部分给.dll。
在大型软件的更新中,如果更新一个庞大的exe文件,负担想必是极大的。如果仅针对其中某几个.dll更新,则可以减少更新的大小。提高灵活性。
缺点还是有的,在程序刚开始运行时,程序会动态链接n个.dll,这个操作需要花时间。
(某些大型游戏,点开图标后,半天都不把程序弹出来,大概也有这个原因- -||)
标签:源代码编译 静态链接 程序启动 使用 时间 动态链接库 就会 需要 空间
原文地址:https://www.cnblogs.com/KillerAery/p/9097541.html