简述

好久没有用过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_NAMEBOOST_LIB_TOOLSET等无需指定,BOOST_LIB_TOOLSET在编译时候会自己确定,BOOST_LIB_NAME会根据你引用的头文件进行确定。

如果不想使用自动链接,自己添加指定的库到项目中,可以指定BOOST_ALL_NO_LIB或者BOOST_模块名_NO_LIB来取消自动链接库名。

MSVC下使用Boost的自动链接的更多相关文章

  1. Boost的自动链接功能

    Boost是一个强大的C++第三方库,但是Boost的各种问题实在是很让人蛋疼.我搜到过一篇文章关于LuaBind使用Boost Build管理工具来管理源代码以及编译的博文,其第一句话就是Fuck ...

  2. QT windows msvc下使用boost库(备忘)

    win32-msvc2015: { contains(QMAKE_HOST.arch, x86):{ INCLUDEPATH += D:\3SDK\boost_1_61_0 LIBS += -LD:\ ...

  3. 如何在WINDOWS下编译BOOST C++库 .

    如何在WINDOWS下编译BOOST C++库 cheungmine 2008-6-25   写出来,怕自己以后忘记了,也为初学者参考.使用VC8.0和boost1.35.0.   1)下载boost ...

  4. 移除wordpress留言中自动链接功能

    默认情况下,在 WordPress 博客的留言中含有 URL,会自动变成可点击的,虽然这样的链接是 nofollow 的,但是还是成为 SPAM 利用的对象,所以可以移除这个自动链接功能. 我们可以在 ...

  5. VC2010工程依赖不再自动链接

    发现 VC2010 Express  设置了 Project Dependencies 之后并没有自动链接. 而在VC2008中工程依赖不仅影响构建顺序,也会自动链接依赖项. 具体说明见: http: ...

  6. [转]linux下编译boost.python

    转自:http://blog.csdn.net/gong_xucheng/article/details/25045407 linux下编译boost.python 最近项目使用c++操作python ...

  7. 2017-7-18-每日博客-关于Linux下的软链接和硬链接.doc

    ln命令 该命令在文件之间创建链接.这种操作实际上是给系统中已有的某个文件指定另外一个可用于访问它的名称.对于这个新的文件名,我们可以为之指定不同的访问权限,以控制对信息的共享和安全性的问题. 如果链 ...

  8. Linux下Jenkins与GitHub自动构建NetCore与部署

    今天我们来谈谈NetCore在Linux底下的持续集成与部署.NetCore我就不多介绍了,持续集成用的是Jenkins,源代码管理器用的是GitHub.我们就跟着博文往下走吧. 1.Linux环境 ...

  9. Linux下Jenkins与GitHub自动构建Node项目(Vue)

    根据上篇文章<Linux下Jenkins与GitHub自动构建NetCore与部署>,我们知道了Jenkins的强大功能,自动构建,部署了一个NetCore的Web,让开发人员专注于开发, ...

随机推荐

  1. tf.argmax

    tf.argmax(input, axis=None, name=None, dimension=None) Returns the index with the largest value acro ...

  2. 启明星手机版安卓android会议室预定系统 V1.0发布

    启明星手机版会议室预定系统 V1.0发布 在手机里输入 http://www.dotnetcms.org/e4.apk 或者扫描二维码下载 用户打开系统,可以实时查看所有会议室状态 点击会议室名称,可 ...

  3. HDOJ 4869 Turn the pokers

    最后的结果中正面向上的奇偶性是一定的,计算出正面向上的范围low,up 结果即为 C(m.low)+ C(m.low+2) +.... + C(m,up) ,用逆元取模 Turn the pokers ...

  4. 数学图形(1.48)Cranioid curve头颅线

    这是一种形似乎头颅的曲线.这种曲线让我想起读研的时候,搞的医学图像三维可视化.那时的原始数据为脑部CT图像.而三维重建中有一种方式是面绘制,是将每一幅CT的颅骨轮廓提取出来,然后一层层地罗列在一起,生 ...

  5. [NL系列] RNN & LSTM 网络结构及应用

    http://www.jianshu.com/p/f3bde26febed/ 这篇是 The Unreasonable Effectiveness of Recurrent Neural Networ ...

  6. 转: 使用MinGW + Eclipse CDT进行C++开发的配置方法

    使用MinGW + Eclipse CDT进行C++开发的配置方法 1 2 3 4 5 6 分步阅读 Eclipse作为开源的IDE,可以用来高效开发Java.C++.C等程序.本文介绍如何在Wind ...

  7. OpenGL中的原子操作需要注意的地方

    OpenGL中的原子操作需要注意的地方 仔细阅读看画红线的部分

  8. [Spring boot] Read values from external properties file

    Let's say we have a extral app.proporites file which contains some extra configuration: // resources ...

  9. OpenGL ES 3.0之Shader and program(七)

    着色器对象和程序对象是使用着色器渲染的2种基本的对象类型.一个着色器对象可以当做是一个C编译器,而程序对象作为连接器.一个编译器生成目标代码(如.OBJ,.o文件),对象文件完成创建后,C连接器将该对 ...

  10. jetty 9使用

    jetty 9 使用 下载jdk 7 http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-ja ...