21

Steve tells me, że VC 2015 i VC 2017 są rzeczywiście (będą) zgodne z binarnymi.Czy Visual-C++ - 2017 jest binarny zgodny z VC++ - 2015?

Znalazłem zero info wrt. to w release notes for 2017 (RC) - lub prawie wszędzie w tym zakresie, tak tu idzie:

  • Czy C++ (C++ interfejs) DLL zbudowany z VC++-2017 zgodny binarnie z DLL zbudowany przez VC++ - 2015?
  • Czy w latach 2017 i 2015 używa się tego samego (dynamicznego) runtime library?
  • Jeśli tak, to jaka jest różnica między zestawem narzędzi platformy Visual Studio 2017 (v141) a ? (*)

(*): Tak, rzeczywiście poszedł do przodu i zainstalował 2017 RC, iz tego co widzę na powierzchni, co najmniej używana jest identyczne MSVCRT, że jest msvcp140.dll i vcruntime140.dll (pomimo zestaw narzędzi platformy miano "v141".

Odpowiedz

19

Tak, biblioteki 141 i 140 są niemal identyczne. wersja została wpadł do emisji side-by-side. The V140 zestaw narzędzi w VisualC++ 2015 i v141 zestaw narzędzi w VC++ 2017 jest kompatybilny z binarnymi.

+1

Czy tak jest w przypadku VS2017 15.3? Otrzymujemy teraz błędy linkera ("inna wersja kompilatora") z obecnie statycznymi bibliotekami 2015. –

+0

Nie mogę zainstalować ** VC++ 2015Redist ** na komputerze z ** VC++ 2017Redist ** https://stackoverflow.com/questions/45967479/can-visual-c-2017- redistributable-package-support-the-applications-to-use-vc –

+2

Kevin, czy korzystasz z bibliotek skompilowanych z/GL (kodegenerator czasu połączenia)? Nie są one obsługiwane w większych wersjach kompilatora. Pracowali z 15,0-15,2, ale to tylko głupie szczęście. – apardoe

1

W skrócie: VC Runtime in MSVC 2017 is binary compatible with 2015

Pozwolę sobie odpowiedzieć na twoje pytania jeden po drugim.

  1. TAK. Oba będą zależeć od msvcp140.dll i vcruntime140.dll. Jeśli masz bibliotekę zbudowaną za pomocą zestawu narzędzi platformy v140, ten plik binarny i twój kod zużywający go będzie działał nawet po zbudowaniu kodu za pomocą zestawu narzędzi MSVC v141. Należy jednak uważać, aby dla każdej biblioteki DLL/exe, jeśli jakakolwiek jej część została zbudowana przy użyciu zestawu narzędzi MSVC v141, ostateczna biblioteka dll/exe musi być połączona zestawem narzędzi MSVC v141.
  2. Nie. Mają takie same nazwy, ale nie są takie same. Biblioteki DLL z VS 2017 są nowsze.
  3. Tak. Są to różnice. Nowsze jest lepsze.

VCRedist jest kompatybilny tylko z poprzednimi wersjami, więc będziesz musiał ponownie rozpowszechniać najnowszy VCRedist dostępny w VS 2017 w swojej aplikacji. W tym momencie, z tego, co wiem, nadal można zbudować program przez VS 2017, ale uruchomić go w środowisku wykonawczym VC 2015. Ale nikt nie może zagwarantować, że to zawsze zadziała, ponieważ zespół VS może dodawać nowe symbole eksportu do swojego środowiska wykonawczego VC.

+0

Dobra uwaga dotycząca upewnienia się, że zainstalowana jest najnowsza redycja. –

Powiązane problemy