Если я напишу на C и MinGW и укажу ссылку на библиотеку C ++, скомпилированную VC - будет ли она работать?
Это зависит от компиляторов (и я не знаю MinGW) и от конкретной библиотеки C ++.
Причины, по которым он может не связываться или может аварийно завершить работу при ссылке:
Библиотека C ++ экспортирует классы и методы C ++, используя "искаженные" имена , но искажение имени в MinGW на C ++ может (я не знаю) отличаться от VC (и не существует) когда вы пишете код на C вместо C ++)
Код VC не использует ту же библиотеку времени выполнения C, что и MinGW, которая будет кусать вас, если API таков, что память выделяется в куче кодом VC, а затем предполагается, что она освобождается Код MinGW.
Код VC не совместим двоично с кодом MinGW (не использует те же соглашения о передаче параметров, не реализует исключения аналогичным образом)
С другой стороны, некоторые причины, по которым это может работать:
Библиотека C ++ написана с интерфейсом в стиле C, разработчиками, которые намеревались вызывать ее из другого компилятора
То же, что и 1.
Создатели компилятора MinGW сделали его двоично-совместимым с VC
Откуда я знаю заранее?
Я не знаю. Если вы публикуете имена функций, экспортируемых из DLL, и / или заголовочный файл, который объявляет свой открытый / экспортированный API, это даст мне (или кому-то еще) очень сильный намек на то, экспортирует ли он (возможно, несовместим) C ++ в стиле или экспорт (более вероятно, совместимый) функций в стиле C.
В противном случае у вас есть двухэтапный вопрос:
Что требуется (например, C вместо C ++, например, не предполагая, что они используют одну и ту же кучу, например, определяя соглашение о передаче параметров) для кода MinGW для вызова кода VC?
Была ли ваша библиотека VC написана с учетом этого?
Кто-то, кто использовал оба компилятора, мог бы, вероятно, ответить на первый вопрос (я не использовал MinGW). Я не знаю, кто мог ответить на второй; кто написал эту библиотеку VC?