如何将vcpkg boost与MinGW链接

时间:2019-01-11 23:17:24

标签: c++ boost window mingw

我有一个在VS 2017 Community下可以正常工作的代码。现在我不能再使用它了,我不得不切换到MinGW。
我用MinGW编译了boost库,然后使用生成的库链接程序:

  • Lib / libboost_program_options-mgw81-mt-d-x64-1_69.a(静态调试库)
  • Lib / libboost_program_options-mgw81-mt-x64-1_69.a(静态发布库)

这是我正在使用的命令:

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库)。
我尝试过:

  • 使用MinGW构建Boost源并链接到生成的静态库。
  • 使用通过vcpkg在我的计算机上使用的boost(.lib和.DLL)。
    所有尝试都给出了相同的错误。
    我该如何解决?
    环境
    gcc 8.1.0
    提升1.69
    Windows 10 17134

1 个答案:

答案 0 :(得分:0)

问题:
看来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。