У меня есть два сценария.Предположим, у меня есть 3 общие библиотеки, которые экспортируют символы C ++, каждая из которых построена на VS7.1, VS8 и VS9.Я собираю все 3 в VS9.По какой-то причине это работает.Мне не нужно перекомпилировать первые 2 библиотеки в VS9 для компоновщика VS9, чтобы успешно найти символы и связать их.
Теперь, если у меня есть библиотека, которая экспортирует символы только с использованием синтаксиса C (extern "C") это то же самое?Я слышал, что люди говорят, что ABI для C стандартизирован, поэтому есть некоторая гарантия, что вы можете использовать библиотеку C, скомпилированную в Visual Studio 8, во всех версиях Visual Studio.
По сути, комбинациявсех этих вещей сбивает с толку.Я не уверен в том, какие гарантии я имею между связыванием совместно используемых библиотек на основе C ++ и C (используя их соответствующие библиотеки импорта) между различными версиями Visual Studio.Я хотел бы услышать общее согласие в отношении прямой и обратной совместимости обеих библиотек импорта C И C ++ или статических библиотек в любой другой версии Visual Studio.
Причина, по которой это возниклодля меня это потому, что есть библиотеки с закрытым исходным кодом, которые я использую, которые были скомпилированы в Visual Studio .NET 2003 (VS7.1).Моя команда считает, что это привязывает нас к компилятору VS 7.1, однако я вышел и протестировал эти библиотеки как в VS8, так и в VS9, даже в VS2010, и они прекрасно связываются.Однако я не уверен в присущей ему опасности.Обратите внимание, что рассматриваемая библиотека имеет вариант C и вариант C ++.По сути, вариант C - это стандартный экспорт C, а библиотека C ++ - это абстракция над библиотекой C и классами экспорта.