动态链接项目DLL与静态链接项目LIB的构建和使用区别

4 篇文章 0 订阅

作者紧急提醒:这篇文章,无图,很枯燥

使用DLL和LIB的目的:

无论是动态链接也好,静态链接也罢,对于dll和lib开发者来说,都是为了将代码细节能够以别人不可见的形式给别人使用,在不呈现代码细节的状态下实现代码的重用和分享,而反过来对于使用者来说,就是能减少不必要的代码工具,减少项目开发时间。但是实现和使用的形式有一些区别。

区别

构建区别

动态链接库项目在创建的时候是将项目代码编译链接形成*.dll和*.lib文件(即使是动态链接库项目,也会最终形成一个和项目名相同的*.lib文件),在*.dll文件中,在编译阶段将*.h头文件和*.cpp实现文件合并编译成*.obj文件,将很多*.obj文件都打包放在*.dll文件中,而*.lib文件中则是只有所有*.h头文件的编译结果没有.cpp源文件的编译。所以在动态链接项目中,得到的结果就是*.dll大小要比*.lib大很多。

而在静态链接项目创建时将项目代码只编译链接形成*.lib文件,所以就可以知道了,在*.lib文件中是将*.h和*.cpp合并编译成为*.obj文件,然后将很多*.obj文件都打包放在*.lib文件中。

静态链接库项目一个*.lib文件就可以做到动态链接库项目中*.dll和*.lib两个文件才能做到的事情,那为什么还要使用动态链接库的*.dll形式的呢?保留两种形式的存在主要就是在使用过程中的区别。

使用区别

先说一下静态链接库的使用,使用项目中会尝试获得静态链接库项目中定义的头文件和*.lib文件(如果是你直接使用的话,就会需要知道和包含头文件,并且在运行时找到*.lib文件;而如果只是底层项目依赖,可能就只需要你在运行时找到这个*.lib文件),在使用项目需要编译和链接时,将*.lib文件复制到使用项目中形成最终的exe文件(或其他的lib,dll文件)。而每次使用这个*.lib文件都会形成一次复制,那么就会对生成exe文件产生冗余,从而导致最终的可执行文件太大。而如果项目的功能很庞大而仅仅使用静态链接形式,如Photoshop,极品飞车等软件,形成的代码文件就不是几个G的代码了,无法想象现在的计算机能不能装下。

动态链接库项目在使用时是先尝试获得动态链接库项目中定义的头文件和*.lib文件,这和静态链接库项目使用情况一样,因为动态链接项目中*.lib文件只包含头文件信息,没有具体的实现细节,所以在使用项目编译过程中*.lib文件和包含头文件信息就已经足够了,而在运行时则需要找到具体的*.dll文件,否则会出错。而在使用项目打包形成最终的可执行文件或其他的dll或lib文件时,则只需要包含一次*.dll文件即可,而在项目中无需有需要时都进行一次拷贝,所以不会导致打包文件很大。

<我写的都快吐了,能看完的也都是勇士!!>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值