Совместимы ли двоичные файлы Visual C ++ 2013 с двоичными файлами Visual C ++ 2017? - PullRequest
0 голосов
/ 24 апреля 2018

В одном из наших решений C ++ мы используем библиотеки третьей части. Эти библиотеки совместимы с VS 2013. Теперь мы переносим наше решение на VS 2017 и обнаружили, что некоторые сторонние библиотеки не имеют версий, совместимых с VS 2017.

Поэтому мы попытались использовать некоторые из VS2013-совместимых библиотек в VS20173, и проверенные вызовы API работают нормально.

Можно ли предположить, что библиотеки работают с исполняемым файлом VS 2017 без каких-либо проблем?

Ответы [ 2 ]

0 голосов
/ 24 апреля 2018

Ничего не гарантируется, но двоичная совместимость компиляторов Visual C ++ обычно лучше, чем официально объявлено. Просто убедитесь, что вы не создаете / уничтожаете объект в разные среды выполнения, распространяете исключения и не передаете связанные с STL объекты в качестве параметров.

Если сторонние библиотеки предоставляют интерфейсы в стиле C и они скомпилированы как DLL, задача еще проще. Поэтому вы должны проверить эти интерфейсы и проверить, насколько они отличаются от общих рекомендаций по взаимодействию.

0 голосов
/ 24 апреля 2018

В общем - нет. AFAIK, VC ++ 2015 (он же набор инструментов v140) и VC ++ 2017 (он же набор инструментов v141) заявлены как двоичные. Никаких таких заявлений не было сделано в отношении VC ++ 2013, и я считаю, что есть серьезные изменения (например, sizeof (list) и т. Д.).

Это может работать, но может привести к трудной отладке

Заявление Microsoft:

«Более серьезное изменение, критическое изменение может повлиять на двоичную совместимость, но эти виды разрывов двоичной совместимости возникают только между основными версиями Visual Studio. Например, между Visual Studio 2013 и Visual Studio 2015».

см. https://docs.microsoft.com/en-us/cpp/porting/visual-cpp-change-history-2003-2015

...