ABI-совместимость визуальных студийных c-библиотек

Насколько я понимаю, (за заметным исключением перехода с VS2015 на VS2017) Microsoft вносит изменения в ABI между каждой версией инструментария Visual C++. Поэтому, если я хочу распространять двоичную версию библиотеки, мне нужно распространять отдельную версию для каждой новой версии VS, которую я хочу поддерживать.

Теперь мои вопросы:

  • Это также верно для чистых c-библиотек?
  • Различается ли ответ между dll и статическими библиотеками?
  • Есть ли официальная политика от MS в отношении того, к чему они стремятся в будущем?

(в частности, в свете рефакторинга и стабилизации ЭЛТ)

Если это уместно, я бы удовлетворился ответом, специфичным для Win10, но я также заинтересован во всех версиях Windows начиная с (и включая) Win7. Версии VS Studio, которые меня интересуют, - VS2013/15/17 и, насколько это возможно, будущие выпуски.

1 ответ

ABI чистого C, безусловно, стабильный. Вы можете смешивать библиотеки DLL, созданные с другой версией VisualStudio, при условии, что у вас также есть правильные зависимости MSVCRT* (это неприменимо, если вы, очевидно, создаете их со статическим libc).

Однако вы должны проявлять особую осторожность при передаче указателя (см. http://siomsystems.com/mixing-visual-studio-versions/ а также совместимость библиотеки ABI между версиями Visual Studio)

Другие вопросы по тегам