usbd.lib的生成

关于usbd.lib的具体生成可以参考PUBLIC/COMMON/CESYSGEN/makefile

在public/common/cesysgen/makefile里有如下usbd规则(我过滤了不相关的规则)
usbd::
  @set TARGETLIBS=$(OWNSTATICLIB)

usbd::
  @set RELEASETYPE=OAK
  @set CPL=

usbd::
  @set DLLENTRY=_DllMainCRTStartup

usbd::
  @set TARGETTYPE=DYNLINK
  @set DEFFILE=$(SG_INPUT_LIB)/$@.def
  @set TARGETLIBS=%%TARGETLIBS%% $(SG_OUTPUT_SDKLIB)/coredll.lib
  @set SOURCELIBS=
  @set TARGETNAME=$@
  $(MAKECMD) /NOLOGO $(SG_OUTPUT_OAKTGT)/$@.dll

这些规则拼接起来就是usbd的makefile 规则。从上面的规则可以看出,usbd是个dll,你说的usbd.lib是usbd.dll的导出库。而usbd_lib.lib是usbd.dll的静态库,也就是说usbd_lib.lib是usbd.dll的源码库,里面有usbd.dll的主要源码。usbd.lib只是很小的导出库,只包含usbd.dll的导出函数的信息,用来被需要调用usbd.dll导出函数的模块导入。这2个lib是不一样的,如果用usbd_lib.lib替换usbd.lib,肯定有很多link error。

编译public/common/oak/drivers/usb/usbd目录就可以生成usb_lib.lib
因为usbd.dll的规则在public/common/cesysgen/makefile里,所以usbd.dll需要用命令sysgen usbd或者在PB UI上sysgen出来。sysgen在生成usbd.dll的同时,也会生成它的导出库usbd.lib

 

usbd_lib.lib是usbd.dll的源码库, 编译public/common/oak/drivers/usb/usbd目录就可以生成usb_lib.lib

 

usbd_lib.lib大概160K, usbd.dll大概20K.

我dumpbin /all usbd_lib.lib和dumpbin /all usbd.dll,对比了两者的结果:
1. lib里包含了多有内部函数和变量的符号,比如?LoadGroupDriver@@YAHPAUSDevice@@PAHPBU_USB_INTERFACE@@HHH@Z
,也就是LoadGroupDriver(struct SDevice *,int *,struct _USB_INTERFACE
 const *,int,int,int)的C++编译内部名字。而这些信息在dll里没有。
2. usbd_lib.lib里包含完整usbd.obj和usbddrv.obj的内容。当然,这两个obj的内容肯定有重复的,比如可能的头文件里的code。 当link.exe连接lib到usbd.dll时,link.exe会做优化:去掉obj之间重复的,去掉obj里没有被引用的代码。
3. lib里包含了很多源文件和头文件的全路径文件名。dll里没有。
4. lib里包含了debug$F/debug$S等节区,dll里没有。

但我不确定是否还有别的区别导致了文件大小的差别。但static lib比它最终生成的dll大是肯定的,因为lib包含了很多信息,比如这个lib里包含了哪些符号,这个lib需要引入哪些符号。link.exe需要这些信息来判断link时的库是否满足需求,否则就会遇到常见的unresolved symbol之类的link error。

 

http://topic.csdn.net/u/20100926/21/e7425398-8748-48b0-91a5-6f6e45ddc427.html?seed=1396455448&r=68719454#r_68719454

参与评论 您还未登录,请先 登录 后发表或查看评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

laoshizhuce

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值