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