Отражение требует, чтобы некоторые метаданные о типах были сохранены где-нибудь, который может быть запрошен. Так как C++ компилирует в собственный машинный код и претерпевает тяжелые изменения из-за оптимизации, представление высокого уровня приложения в значительной степени потеряно в процессе компиляции, следовательно, не будет возможно запросить их во время выполнения. Java и.NET используют представление очень высокого уровня в двоичном коде для виртуальных машин, делающих этот уровень из возможного отражения. В некоторых реализациях C++, однако, существует что-то названное Информацией о типе выполнения (RTTI), которую можно считать разделенным вниз версией отражения.
Boost делает предположения о вашей ОС и текущей сборке на основе вашей текущей системы. Что, если бы вы получили файлы заголовков win32, удалили все заголовки linux из пути включения, а затем попытались построить?
На самом деле это не ответ, но: не надо!
Кросс-компиляция на совершенно другую платформу обычно является огромной проблемой в ****.
Если вы пытаются собрать двоичные файлы Windows на одном компьютере, например, для упаковки, использовать виртуальную машину с окнами, mingw и соответствующими сценариями.
Затем вы даже можете запускать автоматические тесты на виртуальной машине и т. д. с вашей сборкой, которая должна быть огромное преимущество.
В официальной документации есть раздел о кросс-компиляции . Сравнивая это с тем, что вы делаете, есть две проблемы:
Вы указываете i586-mingw32msvc-gcc и должны указывать i586-mingw32msvc-g ++. Первый - это компилятор C, который немного сложно использовать для компиляции кодовой базы C ++; -)
Вам нужен target-os = windows
Обратите внимание, что там есть одна известная ошибка - при создании static , они не передаются через ranlib, и компоновщик mingw особенно расстроен этим. Если вы планируете использовать статические библиотеки, вам придется запускать ranlib вручную.
Здесь есть очень простая процедура для перекрестного повышения скорости сборки с Linux на Windows: