MSVC下使用Boost的自动链接
简述
好久没有用过boost库了,以前用也是在linux下,需要哪个部分就添加哪个部分到Makefile中。
最近要在Windows下使用,主要是mongocxx库依赖它,不想自己去编译它了,就直接在https://dl.bintray.com/boostorg/release/1.66.0/binaries/上下载已经编译好的版本。
下载安装后发现一个问题,就是它的lib
目录下存在多个不同编译参数编译的版本,在VC中它会自己根据当前环境选择对应的库进行链接(通过#pragma comment(lib,"库路径"
指令实现)。而我需要使用指定的版本。
关于boost在windows下编译出的库文件的命令方式可以在这里查到http://www.boost.org/doc/libs/1_66_0/more/getting_started/windows.html。
我就不做翻译了,网上找到了两篇介绍的文章
Boost库的命名规则
Boost库编译后命名方式
指定使用的boost编译版本说明
这里主要是要说一下如何指定使用特定编译版本的boost库。
在工程中可以通过定义下面几个宏变量来设置
变量名 | 含义 |
---|---|
BOOST_LIB_NAME | 必需:包含库的基本名称的字符串,例如boost_regex |
BOOST_LIB_TOOLSET | 可选:工具集的基本名称,例如VS2015就是vc140 |
BOOST_LIB_THREAD_OPT | 多线程版本选项,-mt用于多线程构建,否则为空 |
BOOST_LIB_RT_OPT | 指示使用的运行时库的后缀在连字符后包含以下一个或多个字母: s 使用静态运行时库的版本(对应VC的MT),留空则为动态运行时库版本 g Debug版本运行时库版本(对应VC的MTd或MDd),为空则为release运行时版本 y python Debug版本 d Debug版本库 p 使用STLport编译版本 n 没有使用iostream的STLport构建版本 |
BOOST_LIB_ARCH_AND_MODEL_OPT | 架构和地址模型(-x32表示x86/32版本-x64表示x86/64版本) |
BOOST_LIB_VERSION | Boost版本,形式为x_y,用于Boost版本x.y. |
以下是用于编译boost时候的 | |
BOOST_DYN_LINK | 可选:要设置链接dll而不是静态库时 |
BOOST_LIB_DIAGNOSTIC | 可选:要设置头文件打印出选定的库名(用于调试) |
BOOST_AUTO_LINK_NOMANGLE | 指定应该连接到BOOST_LIB_NAME.lib,而不是带这些版本信息名称(就是-mt -s -gb等,名称错位)的版本 |
BOOST_AUTO_LINK_TAGGED | 指定链接到使用--layout = tagged选项构建的库。这在本质上是一样的默认名称错位版本,但没有编译器的名称和版本,或boost版本。 仅用于构建选项 |
这些信息可以在boost/config/auto_link.hpp
文件中看到。
比如说我要使用的是Boost的多线程版本静态库,链接release版动态运行时库的版本,使用的是64位架构版本,那我使用的参数如下
BOOST_LIB_THREAD_OPT=-mt
BOOST_LIB_RT_OPT
BOOST_LIB_ARCH_AND_MODEL_OPT=-x64
BOOST_LIB_VERSION=1_66
对于BOOST_LIB_NAME
和BOOST_LIB_TOOLSET
等无需指定,BOOST_LIB_TOOLSET
在编译时候会自己确定,BOOST_LIB_NAME
会根据你引用的头文件进行确定。
如果不想使用自动链接,自己添加指定的库到项目中,可以指定BOOST_ALL_NO_LIB
或者BOOST_模块名_NO_LIB
来取消自动链接库名。
MSVC下使用Boost的自动链接的更多相关文章
- Boost的自动链接功能
Boost是一个强大的C++第三方库,但是Boost的各种问题实在是很让人蛋疼.我搜到过一篇文章关于LuaBind使用Boost Build管理工具来管理源代码以及编译的博文,其第一句话就是Fuck ...
- QT windows msvc下使用boost库(备忘)
win32-msvc2015: { contains(QMAKE_HOST.arch, x86):{ INCLUDEPATH += D:\3SDK\boost_1_61_0 LIBS += -LD:\ ...
- 如何在WINDOWS下编译BOOST C++库 .
如何在WINDOWS下编译BOOST C++库 cheungmine 2008-6-25 写出来,怕自己以后忘记了,也为初学者参考.使用VC8.0和boost1.35.0. 1)下载boost ...
- 移除wordpress留言中自动链接功能
默认情况下,在 WordPress 博客的留言中含有 URL,会自动变成可点击的,虽然这样的链接是 nofollow 的,但是还是成为 SPAM 利用的对象,所以可以移除这个自动链接功能. 我们可以在 ...
- VC2010工程依赖不再自动链接
发现 VC2010 Express 设置了 Project Dependencies 之后并没有自动链接. 而在VC2008中工程依赖不仅影响构建顺序,也会自动链接依赖项. 具体说明见: http: ...
- [转]linux下编译boost.python
转自:http://blog.csdn.net/gong_xucheng/article/details/25045407 linux下编译boost.python 最近项目使用c++操作python ...
- 2017-7-18-每日博客-关于Linux下的软链接和硬链接.doc
ln命令 该命令在文件之间创建链接.这种操作实际上是给系统中已有的某个文件指定另外一个可用于访问它的名称.对于这个新的文件名,我们可以为之指定不同的访问权限,以控制对信息的共享和安全性的问题. 如果链 ...
- Linux下Jenkins与GitHub自动构建NetCore与部署
今天我们来谈谈NetCore在Linux底下的持续集成与部署.NetCore我就不多介绍了,持续集成用的是Jenkins,源代码管理器用的是GitHub.我们就跟着博文往下走吧. 1.Linux环境 ...
- Linux下Jenkins与GitHub自动构建Node项目(Vue)
根据上篇文章<Linux下Jenkins与GitHub自动构建NetCore与部署>,我们知道了Jenkins的强大功能,自动构建,部署了一个NetCore的Web,让开发人员专注于开发, ...
随机推荐
- django时区设置以及全球用户如何各自显示当地时间
在Django的配置文件settings.py中,有两个配置参数是跟时间与时区有关的,分别是TIME_ZONE和USE_TZ 如果USE_TZ设置为True时,Django会使用系统默认设置的时区,即 ...
- maven配置sqlServer的依赖
配置sqlServer的依赖 <dependency> <groupId>com.microsoft.sqlserver</groupId> <artifac ...
- GraphX中Pregel单源点最短路径(转)
原文链接:GraphX中Pregel单源点最短路径 GraphX中的单源点最短路径例子,使用的是类Pregel的方式. 核心部分是三个函数: 1.节点处理消息的函数 vprog: (VertexId ...
- 单一职责原则(Single Responsibility Principle,SRP)
定义:不要存在多于一个导致类变更的原因.通俗的说,即一个类只负责一项职责. 问题由来:类T负责两个不同的职责:职责P1,职责P2.当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的 ...
- 揭秘uc浏览器一
首先,看一下项目完成后的,最终效果是这样的: 一.主界面 二,书签界面 三.主界面 四.操作对话框界面 这几个界面你是否看到了uc浏览器的影子了,其实我说你也可以了,在接下来篇幅中,我将手把手叫大家完 ...
- ODBC更新记录集提示”记录集为只读“
创建的ODBC应用程序默认的记录集不具有只读属性,但是再更新记录表时会提示”记录集为只读“,这是为什么呢? 今天看书找到了答案: 因为MFC中的数据库类不支持需要连接两个或者多个表的记录集更新,如果选 ...
- 大数据开发实战:Spark Streaming流计算开发
1.背景介绍 Storm以及离线数据平台的MapReduce和Hive构成了Hadoop生态对实时和离线数据处理的一套完整处理解决方案.除了此套解决方案之外,还有一种非常流行的而且完整的离线和 实时数 ...
- 零基础学python-7.2 字符串常量
1.单双引號字符串是一样的 >>> 'abc',"abc" ('abc', 'abc') >>> 当你的python照着上面的样例来写,这个时候 ...
- echarts文档对照
echarts的各种配置项可以对照这个文档: https://echarts.baidu.com/echarts2/doc/option.html#title~tooltip.axisPointer. ...
- Total Commander如何设置自定义快捷键在当前目录打开ConEmu
Total Commander,简称TC,原名Windows Commander,是Windows平台下功能最强大的全能文件管理器. 自从使用了TC基本上就很少再打开Window的文件夹了,因为TC不 ...