Если символы искажены по-разному, компиляторы используют другой ABI, и вы не сможете «конвертировать» или что-либо подобное скомпилированным библиотекам: имена причин искажаются по-разному, это намеренно, чтобы пользователи никогда не преуспели с построение исполняемого файла из объектных файлов с использованием различных ABI. ABI определяет, как передаются аргументы, как представляются таблицы виртуальных функций, как генерируются исключения, размер базовых типов данных и ряд других вещей. Название искажения также является частью этого и тщательно выбрано, чтобы быть эффективным и отличным от других ABI на той же платформе. Самый простой способ узнать, действительно ли имя искажения действительно отличается, - это скомпилировать файл с парой функций, используя только базовые типы с обоими компиляторами, и взглянуть на символы (в UNIX я бы использовал nm
для этого; I ' я не программист Windows, и поэтому я не знаю, какой инструмент использовать там).
Основываясь на Википедии , кажется, что MinGW также использует другую библиотеку времени выполнения: макет и реализацию стандартной библиотеки C ++, используемой MinGW ( libstdc ++ ) и Visual Studio ( Dinkumware ) не совместим. Даже если ABI между двумя компиляторами одинаков, стандартная библиотека C ++ не такова. Если ABI такой же, вам нужно заменить настройки так, чтобы один компилятор использовал стандартную библиотеку соответствующего другого компилятора. Нет никакого способа сделать это с уже скомпилированной библиотекой. Я не знаю, выполнимо ли это.
Лично я не стал бы пытаться связать вещи между этими двумя разными компиляторами, потому что он не должен работать вообще. Вместо этого вам нужно перенести реализацию на общий компилятор и перейти оттуда.