【问题标题】:How to link vcpkg boost with MinGW如何将 vcpkg boost 与 MinGW 链接
【发布时间】:2019-01-11 23:17:23
【问题描述】:

我的代码在 VS 2017 社区下运行良好。现在我不能再使用它了,我不得不切换到 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
    视窗 10 17134

【问题讨论】:

    标签: c++ boost window mingw


    【解决方案1】:

    问题:
    似乎 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..

    【讨论】:

      猜你喜欢
      • 2018-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-22
      相关资源
      最近更新 更多