Boost库编译后命名方式

Boost官网的《Geting Started On Windows》提到了Boost库的命名,摘录如下:
 
以 libboost_regex-vc71-mt-d-1_34.lib 为例:
lib
前缀:除了Microsoft Windows之外,每一个Boost库的名字都以此字符串开始。在Windows上,只有普通的静态库使用lib前缀;导入库和DLL不使用。

boost_regex
库名称:所有boost库名文件以boost_开头。

-vc71
Toolset 标记:标识了构建该库所用的toolset和版本。

-mt
Threading 标记:标识构建该库启用了多线程支持。不支持多线程的库没有-mt。

-d
ABI标记:编码了影响库和其他编译代码交互的细节。对于每一种特性,向标记中添加一个字母:
Key Use this library when:
s 静态链接到C++标准库和编译器运行时支撑库
g 使用标准库和运行时支撑库的调试版本
y 使用Python的特殊调试构建
d 构建代码的调试版本
p 使用STLPort标准库而不是编译器提供的默认库
n 使用STLPort已被弃用的“native iostreams”

-1_34
版本标记:完整的Boost发布号,下划线代替点。例如,1.31.1版本将被标记为“-1_31_1”。

.lib
扩展名:取决于操作系统。在大多数unix平台上,.a是静态库,.so是共享库。在Windows上,.dll表示共享库,.lib是静态或导入库。
 
下表是对Regex库编译后的文件名:
文件名 含义 编译使用该库的程序时应使用的编译选项
libboost_regex-vc90-mt-sgd-1_38.lib 静态库,多线程,调试版本
使用静态调试版本C运行时库(LIBCMTD.LIB和LIBCPMTD.LIB) /MTd

libboost_regex-vc90-mt-s-1_38.lib 静态库,多线程
使用静态版本C运行时库(LIBCMT.LIB和LIBCPMT.LIB) /MT

libboost_regex-vc90-mt-gd-1_38.lib 静态库,多线程,调试版本
使用动态调试版本C运行时库(MSVCRTD.LIB和MSVCPRTD.LIB) /MDd

libboost_regex-vc90-mt-1_38.lib 静态库,多线程
使用动态版本C运行时库(MSVCRT.LIB和MSVCPRT.LIB) /MD

boost_regex-vc90-mt-gd-1_38.lib 导入库(boost_regex-vc90-mt-gd-1_38.dll),多线程,调试版本 
boost_regex-vc90-mt-1_38.lib 导入库(boost_regex-vc90-mt-1_38.dll)多线程 
 
需要注意的是,

链接时,所使用的Regex库文件名必须和编译选项匹配,否则会造成如下链接错误:
LINK : warning LNK4098: defaultlib '×××××' conflicts with use of other libs; use /NODEFAULTLIB:library
原因是,当编译时,cl.exe(也就是VC的编译器)会根据上述编译选项在编译成的obj文件中植入相应的defaultlib文件名(使用DUMPBIN /DIRECTIVE ***,lib可以查看),如/MT对应的就是LIBCMT.LIB(C)和LIBCPMT.LIB(C++标准库)。当链接器处理该obj文件时,会从文件中取出该defaultlib文件名,将其放在命令行库列表的最后以供使用。对于静态库的处理也是如此,静态库也是由一些obj文件组成的,每个obj文件中也根据当时的编译选项被植入了相应的defaultlib。当链接器处理静态库时,也会将涉及到的obj文件中的defaultlib放在命令行库列表的最后。假设,我们的程序使用/MT编译,那个对应的defaultlib就是LIBCMT.LIB(C)和LIBCPMT.LIB(C++标准库)。而使用的是libboost_regex-vc90-mt-sgd-1_38.lib,它对应的defaultlib就是LIBCMTD.LIB和LIBCPMTD.LIB。链接过程中,链接器会发现采用了不同的运行时库,所以会出现上述错误。

下面的错误:

 

image

boost库的版本不对,用下面的软件下载。

image

选择相应的类型即可。

转载于:https://www.cnblogs.com/macroslee/archive/2011/10/31/2230324.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值