首页 > 解决方案 > 如何将 vcpkg boost 与 MinGW 链接

问题描述

我有一个在 VS 2017 社区下运行良好的代码。现在我不能再使用它了,我不得不切换到 MinGW。
我用 MinGW 编译了 boost 库,然后我使用生成的库来链接我的程序:

这是我正在使用的命令:

g++.exe -DNDEBUG -DASCII -Wall -std=c++17 -static-libgcc -static-libstdc++ -L lib  -o prog.exe *.o -lboost_program_options-mgw81-mt-x64-1_69

这就是我得到的:

main.o:main.cpp:(.text+0x203): undefined reference to `__imp__ZN5boost15program_optionslsERSoRKNS0_19options_descriptionE'
main.o:main.cpp:(.text+0x3f9): undefined reference to `__imp__ZN5boost15program_options19options_description21m_default_line_lengthE'
main.o:main.cpp:(.text+0x406): undefined reference to `__imp__ZN5boost15program_options19options_description21m_default_line_lengthE'  
... (more lines like these)  

所有未定义的引用错误仅与boost::program_options调用有关(但我没有使用任何其他 boost 库)。
我努力了:

标签: c++boostwindowmingw

解决方案


问题:
似乎 vcpkg (${vcpkgRoot}/installed/x64-static/include) 中包含的标头不适用于 MinGW。
原始命令g++.exe -DNDEBUG -I'c:/vcpkg/installed/x64-windows-static/include' -L . main.cpp -lboost_program_options-vc140-mt不起作用。这里我使用生成的 boost_program_options-vc140-mt.lib 文件和带有 vcpkg 的头文件。
我尝试使用 MinGW 构建 Boost 并使用 .a 文件:g++.exe -DNDEBUG -I'c:/vcpkg/installed/x64-windows-static/include' -L . main.cpp -lboost_program_options-mgw81-mt-x64-1_69也没有工作。
但是这个命令有效g++.exe -DNDEBUG -I'c:/boost-mingw/boost_1_69_0' -L . .\main.cpp -lboost_program_options-mgw81-mt-x64-1_69
所以这意味着标题特定于 Visual Studio ..


推荐阅读