21

Steve tells me что VC 2015 и VC 2017 на самом деле (собираются быть) бинарные совместимые.Является ли Visual-C++ - 2017 двоичным, совместимым с VC++ - 2015?

Я нашел ноль info wrt. это в release notes for 2017 (RC) - или почти в любом месте по этому вопросу, так что здесь идет:

  • Является C++ (C++ интерфейс) DLL построен с VC++-2017 двоичной совместимостью с DLL построен VC++ - 2015?
  • Может ли 2017 и 2015 использовать тот же (динамический) runtime library?
  • Если да, то какая, если таковая имеется, является runtime разница между Platform Toolset Visual Studio 2017 (v141) и Visual Studio 2015 (v140)? (*)

(*): Да, я на самом деле пошел вперед и установил 2017 RC, и от того, что я могу видеть на поверхности, по крайней мере, используется идентичный MSVCRT, т.е. msvcp140.dll и vcruntime140.dll (несмотря на платформе набор инструментов называют «v141».

ответ

19

Да, 141 и 140 библиотек практически идентичны. вариант был ударен для выпуска бок о бок. в V140 набор инструментов в VisualC++ 2015 и v141 набор инструментов в VC++ 2017 совместим с двоичным кодом.

+1

Это все еще для VS2017 15.3? Теперь мы получаем ошибки компоновщика («другая версия компилятора») с статическими libs 2015. –

+0

Я не могу установить ** VC++ 2015Redist ** на машине с ** VC++ 2017Redist ** https://stackoverflow.com/questions/45967479/can-visual-c-2017- redistributable-package-support-the-applications-that-use-vc –

+2

Кевин, вы используете библиотеки, скомпилированные с/GL (link-time codegen)? Они не поддерживаются в основных версиях компилятора. Они работали с 15.0-15.2, но это была просто глупая удача. – apardoe

1

Короче говоря, VC Runtime in MSVC 2017 is binary compatible with 2015

Позвольте мне задать ваши вопросы один за другим.

  1. ДА. Оба они будут зависеть от msvcp140.dll и vcruntime140.dll. Если у вас есть библиотека, построенная с помощью набора инструментов платформы v140, этот двоичный код и ваш код, потребляющий его, будут продолжать работать, даже если вы создали свой код с помощью набора инструментов v141 MSVC. Но будьте осторожны, что для любой dll/exe, если какая-либо ее часть была построена с помощью набора инструментов v141 MSVC, то окончательная dll/exe должна быть связана с набором инструментов v141 MSVC.
  2. № У них одно и то же имя, но они не совпадают. DLL от VS 2017 новее.
  3. Да. Это различия. Новее лучше.

VCRedist совместим только с обратной связью, поэтому вам необходимо будет перераспределить последний VCRedist, доступный в VS 2017, с помощью вашего приложения. В это время, из того, что я знаю, вы все равно можете создать программу VS 2017, но запустить ее с VC 2015 runtime. Но никто не может гарантировать, что это всегда будет работать, потому что команда VS может добавлять новые экспортные символы в свою среду исполнения VC.

+0

Хороший вопрос о том, чтобы установить новейший редист. –

Смежные вопросы