Windows下构建使用MinGW构建Boost

原文链接

欢迎大家对于本站的访问 - AsterCasc

前言

对于C++的开发而言Boost是常用的工具包,虽然说:

Most Boost libraries are header-only: they consist entirely of header files containing templates and inline functions, and require no separately-compiled library binaries or special treatment when linking

但是还是有很多常用库是依赖的构建的,其中官网的文档主要针对的是VS系列的构建,使用MinGW构建还是有一些坑的,这里我们将从源码使用MinGW进行构建

构建

源码下载

官网地址,这里我们以写作的时候最新版本1.87.0为例,下载源码后解压,然后将命令行位置进入解压后的文件夹boost_1_87_0

B2构建

Boost.Build是其提供的个基于文本的系统,用于开发、测试和安装软件。我们这里首先需要构建安装B2再利用它构建Boost库,进入tools/build目录,运行bootstrap.bat mingw此时B2构建完成

如果遇到res.rc:1: fatal error: when writing output to : Invalid argument,打开执行的bootstrap.bat,我们观察到实际执行的的脚本为src/engine/build.bat,该脚本最后执行%B2_CXX% %CXXFLAGS% %B2_CXXFLAGS% %B2_SOURCES% %B2_CXX_LINK%报错,而环境变量可以阅读出是从同文件夹下的config_toolset.bat定义,打开该文件夹在:Config_MINGW配置中,执行到:Embed_Minafest_Via_Windres,找到实际执行错误代码为:"B2_CXX="%%i" --input res.rc --output res.o && %B2_CXX% -Wl,res.o"%%iwindres

简单介绍一下windres,这个是Windows的资源编译器,可以将rc类的资源文件编程成二进制.o文件,一般是处理清单文件即manifest,或者版本信息,或者一些UI文件,编译成.o的目标文件后C程序就可以直接链接了。如果使用的资源文件过大,或者对于某些版本的MinGW兼容性处理有问题,遇到内存分配问题,需要加--use-temp-file

这里我们在config_toolset.bat中,修改config_toolset.batset "B2_CXX="%%i" --input res.rc --output res.o && %B2_CXX% -Wl,res.o"改成 set "B2_CXX="%%i" --input res.rc --output res.o --use-temp-file && %B2_CXX% -Wl,res.o" 即可

构建Boost

B2构建完成后,将该文件夹添加到环境变量,即可以在命令行直接调用b2 -v,即b2构建顺利,此时回到boost_1_87_0文件夹下,执行b2 install --toolset=gcc --prefix="_install"即可。如果需要只构建指定模块,则使用b2 --toolset=gcc --show-libraries查看所需文件名,再利用b2 install --with-json --toolset=gcc --prefix="_install"构建

链接Boost

我们这里以CMakeLists.txt为例,首先给出安装位置set(BOOST_ROOT /to/your/path/boost_1_87_0/_install),获取引用包模块find_package(Boost REQUIRED COMPONENTS json),最后将指定模块链接上即可target_link_libraries(YourProject Boost::json)

原文链接

欢迎大家对于本站的访问 - AsterCasc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值