Я новичок в C ++, и сейчас я борюсь с компиляцией и компоновкой.
Недавно я использовал cmake и make для перекомпиляции библиотеки (mlpack), которая использует Boost (Cmake не находит boost 1.51 (windows 8)).
В первой попытке я скачал скомпилированные двоичные файлы для Windows. Это не сработало, и мне объяснили, что двоичные файлы, которые я использовал, были для MSVC, а не для MinGW, поэтому проблемы. И действительно, после перекомпиляции boost с использованием MinGW все прошло нормально.
Здесь я просто хотел бы получить представление о том, какие будут различия между двоичными файлами для MSVC и MinGW. Я (наивно?) Думал, что двоичные файлы специфичны для ОС / процессора. Что содержат двоичные файлы для MSVC, которые делают их непригодными для MinGW?
Относительно легко комбинировать артефакты (статические / разделяемые библиотеки), создаваемые MSVC и MinGW (это относится к другим компиляторам C в целом), если они экспортируют чистый C API. Это делает C API очень мобильным, и это одна из главных причин, почему так много популярных библиотек по-прежнему предпочитают использовать чистый C API.
История с C ++ совершенно другая. Наиболее известными препятствиями для правильной совместимости между артефактами, создаваемыми различными компиляторами C ++, являются различия в название искажения а также двоичный интерфейс приложения (ABI). Это относится ко всем компиляторам C ++ в целом, а не только к MinGW и MSVC. Если вы хотите узнать больше о проблемах взаимодействия между MSVC и MinGW, в частности, я рекомендую вам прочитать следующие статьи:
Быть простым.
Винда говорит French
,
МинГВ говорит French
, German
а также English
,
Unix системы говорят German
,
Двоичные файлы MSVC написаны на French
,
Двоичные файлы MinGW написаны на FrenchAngloGerman
,
Двоичные файлы UNIX написаны на German
,
Windows нуждается в MinGW для перевода некоторых German
а также English
в French
прежде чем он сможет понять все.
MinGW не похож на другие программы. Это в основном мини ОС между Windows и Linux. Так что для правильной работы в основном нужна измененная форма двоичных файлов. Тот факт, что вы разрабатываете свою программу для Windows на MinGW, не означает, что она будет работать на чистой Windows без каких-либо проблем. Вам все еще нужно отправлять или распространять библиотеки MinGW и исполняемые файлы, которые вы использовали в своей программе.