我有一个在VS 2017 Community下可以正常工作的代码。现在我不能再使用它了,我不得不切换到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库)。
我尝试过:
答案 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。