У меня есть два сценария. Предположим, у меня есть 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 и экспортирует классы.