В зависимости от нескольких факторов, это может работать или не работать - и по нескольким причинам. Я так понимаю, вы имеете в виду полную, обратимую совместимость.
Для implibs, которые используются для привязки DLL к исполняемым файлам, ответом является no .
Однажды я пытался связать Implib MSVC ++ с DLL, созданным gcc. Если бы форматы были совместимы, это сработало бы, когда я переименовал библиотеку libfoo.a.
Чтобы обойти это, существует утилита reimp, которая может создать подходящий gcc implib из DLL. Чтобы полностью изменить процесс, инструмент lib от microsoft может создать статический имплиб из файла .def, который gcc может создать с помощью DLL, если ему будут заданы правильные флаги. [Поиск "reimp" на веб-сайте MINGW для получения дополнительной информации]
C ++ - скомпилированные объектные файлы также несовместимы из-за искажения имен .
Различные компиляторы C ++ по-разному манипулируют именами переменных и объектов, что приводит к «коду [объекта] ... который обычно не является связываемым»
Для статической библиотеки, скомпилированной как обычный старый C? Да
Мне нужно немного больше информации о том, к какому типу проекта вы относитесь, но если это C и хак `copy libfoo.a foo.lib`, это может иметь место. Попробуйте проверить, работает ли это в обратном порядке с Mingw или Dev-C ++. Редактировать : На самом деле, это будет работать только тогда, когда библиотека скомпилирована с помощью gcc на платформе Windows (и она работает в обоих направлениях!). единственное исключение из этого AFAIK - это кросс-скомпилированные библиотеки - MSVC отказывается принимать их, по крайней мере, с предоставленной Ubuntu «i586-mingw32msvc-ar».
Другое альтернативное объяснение состоит в том, что компоновщик MSVC совместим с форматом .a по историческим причинам. IIRC, это было со времен UNIX. Опять же, хотя я мог видеть, что это работает только для чистого C, а не C ++.
РЕДАКТИРОВАТЬ : Это на самом деле наоборот. Версия инструментария GCC для Windows создает статические библиотеки, совместимые с форматом Microsoft COFF.