如何在Msys2环境下编译调用Boost库的C++代码
问题描述
我已安装所需的全部依赖库,执行的安装命令如下:
pacman -S mingw-w64-x86_64-boost
同时也安装了Msys2安装文档推荐的通用开发库。我使用以下头文件做测试:
#include <iostream> #include <vector> #include <string> #include <boost/program_options.hpp>
我尝试了多种编译命令写法都报相同错误,示例命令及报错如下:
$ g++ -std=c++11 main.cpp -lboost_programoptions -I /mingw64/include/boost/ -o main main.cpp:10:10: fatal error: boost/program_options: No such file or directory 10 | #include <boost/program_options> | ^~~~~~~~~~~~~~~~~~~~~~~ compilation terminated.
我该如何配置才能在Msys2中正常使用Boost库?
问题更新1
排查后发现本机安装了两个版本的gcc:gcc 10.2和mingw-w64-x86_64-gcc 10.3,无法确定需要卸载的版本。pacman -Rcns命令的作用是移除指定包及其所有依赖。两个卸载命令的执行反馈如下:
$ pacman -Rcns gcc checking dependencies... Packages (6) binutils-2.36.1-4 msys2-runtime-devel-3.2.0-14 msys2-w32api-headers-9.0.0.6158.1c773877-1 msys2-w32api-runtime-9.0.0.6158.1c773877-1 windows-default-manifest-6.4-1 gcc-10.2.0-1 Total Removed Size: 319.23 MiB :: Do you want to remove these packages? [Y/n] n $ pacman -Rcns mingw-w64-x86_64-gcc checking dependencies... Packages (7) mingw-w64-x86_64-gcc-ada-10.3.0-5 mingw-w64-x86_64-gcc-fortran-10.3.0-5 mingw-w64-x86_64-gcc-objc-10.3.0-5 mingw-w64-x86_64-isl-0.24-1 mingw-w64-x86_64-libgccjit-10.3.0-5 mingw-w64-x86_64-windows-default-manifest-6.4-3 mingw-w64-x86_64-gcc-10.3.0-5 Total Removed Size: 507.78 MiB :: Do you want to remove these packages? [Y/n] n
问题更新2
卸载了gcc 10.2,切换到mingw64终端而非msys终端执行编译,出现以下报错:
user@host MINGW64 /c/Users/user/boostexample $ g++ main.cpp -o main -lboost_program_options C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lboost_program_options collect2.exe: error: ld returned 1 exit status
最终解决方案
最终使用以下编译命令成功完成编译:
g++ main.cpp -o main -lboost_program_options-mt
后续可查阅官方文档确认Boost库的命名规则说明。
内容的提问来源于stack exchange,提问作者Lucky
相关产品推荐
相关产品推荐

