Использование MSVC-скомпилированных двоичных файлов Boost в проекте, скомпилированном MinGW

0

Я скачал Повысьте эффективность Binaries от здесь. Мой проект зависит от boost_system и boost_filesystem и строит правильно, если я добавляю правильные зависимости к параметрам компоновщика при использовании Visual Studio для компиляции, но теперь я пытаюсь скомпилировать в Code :: Blocks (компилятор MinGW) и работать со следующим:

"directve '/FAILIFMISMATCH:"_MSC_VER=1800" /FAILIFMISMATCH:"_ITERATOR_DEBUG_LEVEL=0" /FAILIFMISMATCH:"RuntimeLibrary=MD_DynamicRelease" /DEFAULTLIB:"msvcprt" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" "

Хотя это предупреждение, это мешает мне найти зависимости, потому что мой проект не может построить с undefined reference to 'boost::system::generic_category()' и множество других связанных неопределенных ссылок.

Вопрос: Должен ли я компилировать Boost из источника с помощью MinGW, чтобы решить мою проблему?

Конечно, я использую соответствующие библиотеки для моей конфигурации сборки (Release, dynamic runtime library).

  • 0
    Мнение: Скорее всего, если вы не включите некоторую зависимость от MSVC в свой проект. В Boost есть много ifdef для разных компиляторов и состояние соответствия стандарту каждого из них.
  • 2
    Вы не можете смешивать C ++, скомпилированные с GCC и Visual Studio: они имеют разные реализации ABI C ++ и генерируют разные «искажения» имен идентификаторов, чтобы символы компоновщика не совпадали. Часто компиляторы C ++ не полностью совместимы между разными версиями одного и того же компилятора. Да, вам нужно будет скомпилировать обе партии одного и того же компилятора.
Показать ещё 2 комментария
Теги:
linker
visual-c++
boost
mingw

1 ответ

1
Лучший ответ

Я делаю answser, основанный на комментариях, размещенных ниже моего вопроса, только чтобы сделать все правильно.

Таким образом, повышение уровня исходного кода с использованием одного и того же компилятора (я использовал TDM-GCC с gcc 4.8.1) действительно решал проблемы с привязкой.

Как отметил Rup, один "не может смешивать C++, скомпилированный с GCC и Visual Studio: они имеют разные реализации C++ ABI и генерируют разные" искажения "имен идентификаторов, чтобы символы компоновщика не совпадали".

Дополнительная ссылка: Взаимодействие библиотек, созданных разными брендами компилятора

  • 0
    Я смутно помню, что должно быть лучше с 64-битными приложениями, некоторые соглашения между поставщиками.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню