SOURCELIBS和TARGERLIBS的区别

 
本文主要描述了SOURCELIBS和TARGERLIBS这两个宏的区别,它们被广泛应用在使用PB来编译Wince/Windows mobile的source文件中出现,本文参考了网上的一些资料,并结合自己的理解,其中的说明有错误的地方,请不吝指正。
根据Crossbow的文档,SOURCELIBS主要用于创建一个新的静态库(LIBs),并且生成的库中使用了其他的静态库,它的作用是指定了哪些静态库(lib)将被链接到目标库中,例如:
SOURCELIBS =/
        $(_COMMONOAKROOT)/lib/$(_CPUINDPATH)/ddk_io.lib/
        $(_COMMONOAKROOT)/lib/$(_CPUINDPATH)/fulllibc.lib
表示生成的目标库中使用了ddk_io.lib和fulllibc.lib,但这并不是必须的,因为静态库中的接口可以没有其实现,可以在使用它的DLLs或者EXEs通过TARGERLIBS去指定需要链接的静态库。
TARGERLIBS用于链接目标可执行文件(EXEs或DLLs)所需要的一些静态库,EXEs或DLLs必须包含每一个函数接口的实现。
SOURCELIBS和TARGERLIBS的存在是Wince模块化特征,链接的过程分为两步:第一步,合并SOURCELIBS指定的静态库,生成单个目标静态库;第二步,链接目标静态库、TARGERLIBS指定的静态库,生成目标可执行文件。如果你已经在SOURCELIBS所指定的静态库test1.lib中定义了一个函数Function1,并且Function1在TARGERLIBS中的某个库中test2.lib也已经有其实现,这时会排除test2.lib中的Function1而使用test1.lib中的Function1,这样就实现了所谓的“条件链接”。但是如果source文件仅包含TARGERLIBS不包含SOURCELIBS,这时将无法确定包含哪个版本的Function1,如上面所说的,实现的函数(源文件中的Function1)具有一个高的优先权进行链接。
下面表示库在上面情况下被链接以及链接的次序(可能会随PB版本的不同而发生变化):
EXEs
仅仅TARGERLIBS指定的库被链接,SOURCELIBS中的任何库都会被忽略。
DLLs
       SOURCELIBS TARGERLIBS 指定的库都会被按顺序链接。
LIBs
SOURCELIBS 仅仅指定的库被链接,TARGERLIBS中的任何库都会被忽略。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值