使用VS2017编译Boost库(MSVC)

本文详细介绍了如何在Visual Studio 2017环境下编译Boost库,包括下载安装VS2017和Boost,使用MSVC编译器配置,以及具体的编译步骤和参数说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、首先得拿到VS2017,Boost,下载链接:

Visual Studio Community 2017:

http://xz.cncrk.com:8080/soft/keygen/visual studio 2017.rar

boost_1_71_0.zip:

https://dl.bintray.com/boostorg/release/1.71.0/source/boost_1_71_0.zip

安装VS2017可以参考我的另外一篇博客《Visual Studio Community 2017安装步骤(只装C++)》:

https://blog.csdn.net/zyhse/article/details/105362609

2、MSVC编译器与版本号

安装完VS2017后,其自带的MSVC编译器叫cl.exe,

位于“D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64下,

不同的版本目录可能不一样。

我们编译就是使用cl.exe来编译,又叫MSVC编译器,版本号就是路径中的MSVC 14.16.27023。

cl.exe路径没有在环境变量中,所以我们使用VS自带的“适用于 VS 2017 的 x64 本机工具命令提示”来代替cmd。

3、编译Boost库

(1)解压boost_1_71_0.zip,在上述“适用于 VS 2017 的 x64 本机工具命令提示”中,我们还是叫他cmd吧。

输入cd /d D:\boost_1_71_0\boost_1_71_0,进入解压后目录。

(2)输入bootstrap msvc,表示使用“msvc”工具集(即我们安装的64位cl.exe)生成编译工具“b2”

会在boost根目录生成 b2.exe  、project-config.jam 、bootstrap.log三个文件

(3)编译并安装boost,输入b2 install --build-type=complete threading=multi link=shared address-model=64 toolset=msvc-14.1

stage表示只生成库(dll和lib),install还会生成包含头文件的include目录

--build-type=complete表示同时生成Debug和Release版本;

 threading=multi表示线程方式使用“multi ”(多线程)

link=shared表示链接方式使用“shared”(即构建动态库),“static”表示编译成静态库;

address-model=64表示地址模型使用64位(即生成的库均为64位库)

toolset=msvc-14.1表示工具集使用“msvc”

(4)编译完成后,会在C:\Boost生成头文件和lib。

使用时需要包含的头文件目录为C:\Boost\include\boost-1_71

需要包含的lib目录为C:\Boost\lib

 


若对你有帮助,欢迎点赞、收藏、评论,你的支持就是我的最大动力!!!

同时,阿超为大家准备了丰富的学习资料,欢迎关注公众号“超哥学编程”,即可领取。

在这里插入图片描述

 

<think>嗯,用户问的是用MinGW编译BoostMSVC能不能使用。这个问题我得仔细想想。首先,Boost本身是跨平台的,支持多种编译器。但关键点在于不同编译器生成的二进制是否兼容。 我记得MSVC和MinGW虽然都能编译C++代码,但它们的ABI(应用程序二进制接口)不兼容。ABI涉及函数调用约定、异常处理、对象内存布局等,如果这些不一致,链接时会出问题。比如,MSVC使用自己的运行时,而MinGW使用GCC的,这可能导致链接错误或者运行时崩溃。 然后,动态链接和静态链接的情况可能不同。静态会把代码直接打包到可执行文件中,这时候如果编译器不同,肯定会有问题。动态的话,可能还会涉及到DLL的导出符号和调用约定不一致,同样可能导致问题。 不过,如果用户只是使用Boost的头文件,比如Boost.Asio、Boost.SmartPtr这些,那就不需要编译,直接包含头文件就行,这时候MSVC是可以用的,因为不涉及二进制兼容问题。但如果是需要编译的部分,比如Boost.Filesystem、Boost.System,就必须用MSVC重新编译。 另外,用户可能需要确认Boost版本是否支持他们的MSVC版本。不同版本的MSVC可能需要不同的Boost构建配置,比如工具集版本。还有,运行时的选项也要一致,比如MT、MD等,否则可能会有冲突。 总结一下,用户的问题核心在于二进制兼容性。必须用相同编译器生成的才能确保兼容。所以正确的做法是用MSVC重新编译Boost,而不是使用MinGW编译的版本。同时提醒用户注意工具集版本和运行时选项的设置,避免后续问题。</think>使用 MinGW 编译Boost 通常**无法直接**在 MSVC(Microsoft Visual C++)中使用,主要原因如下: --- ### 1. **ABI 不兼容** - **编译器差异**:MSVC 和 MinGW(基于 GCC)使用不同的 **C++ ABI(应用二进制接口)**,包括函数调用约定、异常处理、名称修饰(Name Mangling)等。这会导致链接时出现符号错误或运行时崩溃。 - **运行时差异**:MSVC 依赖 `MSVCRT` 运行时,而 MinGW 使用 `libstdc++`(GCC 的标准),二者二进制不兼容。 --- ### 2. **静态 vs 动态** - **静态(.lib/.a)**:直接嵌入到可执行文件中,必须与编译器完全兼容。MinGW 编译的静态无法被 MSVC 识别。 - **动态(.dll)**:即使生成 DLL,MSVC 和 MinGW 的导出符号规则和调用约定(如 `__cdecl` vs `__stdcall`)也不同,无法直接使用。 --- ### 3. **头文件的例外** - 如果仅使用 Boost 的**头文件**(如 `Boost.Asio`, `Boost.SmartPtr` 等),则无需编译MSVC 可直接包含头文件使用。 - 需要编译(如 `Boost.Filesystem`, `Boost.System`)必须用 MSVC 重新构建。 --- ### 解决方案:为 MSVC 编译 Boost 1. **使用 MSVC 工具链重新编译**: - 运行 `bootstrap.bat` 生成 MSVC 专用的构建工具。 - 使用以下命令指定工具集: ```bash b2 toolset=msvc-14.3 (替换为你的 MSVC 版本,如 msvc-14.2 对应 VS 2019) ``` - 确保编译时选择与项目一致的**运行时选项**(如 `/MT` 或 `/MD`)。 2. **预编译**: - 直接从 [Boost 官方](https://www.boost.org/) 或第三方(如 vcpkg)获取 MSVC编译版本。 --- ### 关键注意事项 - **工具集版本**:MSVC 2015/2017/2019/2022 的 ABI 兼容性较好,但仍需匹配工具集版本(如 `msvc-14.x`)。 - **架构一致性**:确保编译时选择相同的架构(x86 或 x64)。 --- ### 总结 **MinGW 编译Boost 二进制无法直接在 MSVC使用**,必须使用 MSVC 工具链重新编译。若仅使用头文件(Header-only),则无需额外操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百里杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值