Совместимость ABI библиотек между версиями Visual Studio

У меня есть два сценария. Предположим, у меня есть 3 общие библиотеки, экспортирующие символы C++, каждая из которых собрана в VS7.1, VS8 и VS9. Я компилирую все три в VS9. По какой-то причине это работает. Мне не нужно перекомпилировать первые 2 библиотеки в VS9, чтобы компоновщик VS9 успешно нашел символы и скомпоновал их.

Теперь, если у меня есть библиотека, которая экспортирует символы только с использованием синтаксиса C (extern "C"), это то же самое? Я слышал, как люди говорили, что ABI для C стандартизирован, поэтому есть некоторая гарантия, что вы можете использовать библиотеку C, скомпилированную в Visual Studio 8, во всех версиях Visual Studio.

В общем, сочетание всех этих вещей сбивает с толку. Я не уверен, какие гарантии у меня есть между компоновкой с общими библиотеками на основе C++ и C (используя соответствующие библиотеки импорта) между различными версиями Visual Studio. Я хотел бы услышать общее мнение о совместимости вперед/назад как C AND C++ import or static libraries на любой другой версии Visual Studio.

Причина, по которой я столкнулся с этим, заключается в том, что я использую библиотеки с закрытым исходным кодом, которые были скомпилированы в Visual Studio .NET 2003 (VS7.1). Моя команда считает, что это привязывает нас к компилятору VS 7.1, однако я тестировал эти библиотеки и в VS8, и в VS9, и даже в VS2010, и они прекрасно соединяются. Тем не менее, я не уверен в том, что в этом есть опасность. Обратите внимание, что у рассматриваемой библиотеки есть вариант на C и вариант на C++. В основном, вариант C - это стандартные экспорты C, а библиотека C++ является абстракцией над библиотекой C и экспортирует классы.

13
задан Vertexwahn 31 August 2017 в 18:17
поделиться