Как связать vcpkg boost с MinGW - PullRequest
0 голосов
/ 12 января 2019

У меня есть код, который отлично работает в рамках VS 2017 Community. Теперь я больше не могу его использовать, и мне пришлось переключиться на MinGW.
Я скомпилировал библиотеку boost с MinGW и затем использовал сгенерированные библиотеки для связи своей программы:

  • 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 (но я не использую никакой другой библиотеки повышения).
Я пробовал:

  • Building Boost source С MinGW и связью с сгенерированной статической библиотекой.
  • Использование надстройки (.lib и .DLL), которая была у меня на компьютере с vcpkg.
    Все попытки дали одинаковые ошибки.
    Как я могу это исправить?
    Окружающая среда
    gcc 8.1.0
    буст 1.69
    Windows 10 17134

1 Ответ

0 голосов
/ 13 января 2019

Проблема:
Похоже, что заголовки, включенные из vcpkg ($ {vcpkgRoot} / instal / 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.
Я попытался собрать Boost с MinGW и использовал файл .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 ..

...