Boost官网的《Geting Started On Windows》(http://www.boost.org/doc/libs/1_38_0/more/getting_started/windows.html)提到了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。链接过程中,链接器会发现采用了不同的运行时库,所以会出现上述错误。

幸运的是,Visual C++支持自动链接,当包含Regex的头文件时,Regex会根据当前工程的编译选项(不同的编译选项会定义不同的宏,具体参见上一篇C运行时库)自动告诉编译器将哪个文件送给链接器。

Boost.Regex默认使用的静态链接方式,如果希望使用动态链接方式,如何实现呢? 定义宏BOOST_REGEX_DYN_LINK。要注意,一定要在包含regex头文件之前定义该宏:

#defineBOOST_REGEX_DYN_LINK
#include <boost/regex.hpp>

关于此宏的解释参见 http://www.boost.org/doc/libs/1_38_0/libs/regex/doc/html/boost_regex/configuration/linkage.html

转载于:https://www.cnblogs.com/hours10000/archive/2013/02/18/2915458.html

【转】boost 库后缀名相关推荐

  1. 个人代码库の自定义后缀名

    using Microsoft.Win32; //操纵注册表的必要命名空间. namespace myMethod { public class CreateSuffixName { //使程序获取被 ...

  2. boost库介绍以及使用

    C++ boost库介绍以及使用 一. 什么是boost库 ​ boost 库是一个优秀的,可移植的,开源的 C++ 库,它是由 C++ 标准委员会发起的,其中一些内容已经成为了下一代 C++ 标准库 ...

  3. boost库在visual studio、DevC++和vscode上的环境配置

    目录标题 @[TOC](目录标题) 1.boost库简介 1. 获取 Boost 2. Boost 的目录结构 3. Boost 使用方式 2.在DEVC++中配置使用boost库的环境 3.在vis ...

  4. 编译后的boost库命名方式

    原文链接:http://www.cnblogs.com/dementia/archive/2009/04/10/1433217.html Boost官网的<Geting Started On W ...

  5. boost库之socket 非阻塞/缓冲区大小等属性设置

    boost库之socket 非阻塞/缓冲区大小等属性设置 原文:http://blog.csdn.net/byxdaz/article/details/77318219 asio socket 非阻塞 ...

  6. VS2008下直接安装使用Boost库1.46.1版本号

    Boost库是一个可移植.提供源码的C++库,作为标准库的后备,是C++标准化进程的发动机之中的一个. Boost库由C++标准委员会库工作组成员发起,当中有些内容有望成为下一代C++标准库内容.在C ...

  7. python idle编辑的代码文件拓展名是_Python IDLE编辑器打开后缀名为.py的文件

    原博文 2020-04-08 17:56 − 在Windows操作系统下默认使用Python自带的IDLE编辑器打开后缀名为.py的文件. 1. win+R打开运行 2. 输入regedit,确定 3 ...

  8. c++ Boost库之boost::bind学习

    刚开始学c++,就看boost库其实有点小小的不情愿. 团队要求必掌握的Boost库: boost::bind boost::function boost::Signals2 学习前奏:在写关于coc ...

  9. Visual Studio 2015 编译与使用Boost库进行文件与目录的操作

    前言 1.Boost库是一个功能非常强大的跨平台开源C++库,我这里只演示如何在win7下visual studio 2015里做boost库的boost::filesystem来操作文件.目录. 2 ...

最新文章

  1. docker 数据共享,数据复制
  2. 欺诈网站都注重用户体验!你,还在等什么?!
  3. 《食堂远程下单系统》需求规格说明书
  4. 【运筹学】单纯形法总结 ( 单纯形法原理 | 单纯形法流程 | 单纯形表 | 计算检验数 | 最优解判定 | 入基变量 | 出基变量 | 方程组同解变换 ) ★★★
  5. 以云战“疫”,这次阿里云又让人们惊了……
  6. 什么是机器学习?有哪些分类?怎样上手开发?终于有人讲明白了
  7. 【openMV】openMV之测距
  8. RHCE认证考试时间是什么时候?
  9. matlab 二进制写入文件,在Matlab中读取/写入二进制文件
  10. 【语义分割专题】语义分割相关工作--SegNet
  11. 考研数学模拟题要选哪个当真题做
  12. 显微镜下的大明——第一个故事
  13. 达梦数据库 防火墙设置
  14. 隐马尔科夫模型——学习算法
  15. 一些基础知识:脑科学、神经科学、心理学
  16. 网址出现dns_probe_finished_no_internet
  17. JDK8 到 JDK17 各个版本的重要特性一览
  18. 记录微机大作业-----流水灯
  19. 在c语言求30角的正弦值,正弦及30度角的正弦值.doc
  20. ERROR: Can not execute `setup.py` since setuptools is not available in the build environment.

热门文章

  1. 中国重汽微服务管理_干货 | 微服务架构下 Spring Cloud OAuth2 通用权限管理系统
  2. 关于Date类型、时间戳格式转换方法
  3. python实现蒙特卡洛算法_用Python实现基于蒙特卡洛算法小实验
  4. markdown 本地链接_记录笔记、markdown工具推荐
  5. 《计算机应用基础实训教程》,《计算机应用基础实训教程》修改稿(文).doc
  6. 如何在WPF 表格中嵌套按钮
  7. c语言自动存储,C语言存储分类
  8. offer上不写具体薪资合理吗_拿着OFFER当白菜?职场菜鸟不带这么玩的
  9. mysql可重复读实验_Mysql可重复读测试
  10. java设置类的字符格式_java类---与格式化相关的类