Is Visual-C++-2017 binary compatible with VC++-2015?
Microsoft has been updating their CRT in an incremental manner.
Visual C++ 14.0 (2015) CRT has 4 files:
- vcruntime140.dll (C Runtime; from refactored msvcr*.dll)
- concrt140.dll (the Concurrency Runtime; also from msvcr*.dll)
- msvcp140.dll (C++ Runtime)
- vccorlib140.dll (C++/CX Platform::*)
Visual C++ 14.1 (2017) CRT adds only 2 files:
- vcruntime140_1.dll (seems like a patch to SEH in vcruntime140.dll)
- msvcp140_1.dll (C++17 Polymorphic Memory Resources)
Visual C++ 14.2 (2019) CRT adds only 2 files:
- msvcp140_2.dll (C++17 Mathematical Special Functions and std::hypot(x, y, z))
- msvcp140_codecvt_ids.dll (bug fix for std::codecvt; see the Stack Overflow question)
If some of the additional features listed above are not used, the binary can work with older versions of C Runtime.
Yes, the 141 and 140 libraries are almost identical. The version was bumped for a side-by-side issue. The v140 toolset in VisualC++ 2015 and v141 toolset in VC++ 2017 are binary compatible.
Yes, visual 2019(14.2),2017(14.1),2015(14.0) are all binary compatible, they are all 14.x version. See more on https://docs.microsoft.com/en-us/cpp/porting/binary-compat-2015-2017?view=vs-2017. New versions add some new features or patches.
The following are the files in 2017 and 2019, you can find the new files added in 2019.
C:\Users\Liu.D.H>dir "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Redist\MSVC\14.16.27012\x64\Microsoft.VC141.CRT"
Volume in drive C is System
Volume Serial Number is 0CAC-076E
Directory of C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Redist\MSVC\14.16.27012\x64\Microsoft.VC141.CRT
2020-09-25 14:41 <DIR> .
2020-09-25 14:41 <DIR> ..
2020-09-25 14:41 332,568 concrt140.dll
2020-09-25 14:41 627,992 msvcp140.dll
2020-09-25 14:41 31,512 msvcp140_1.dll
2020-09-25 14:41 206,104 msvcp140_2.dll
2020-09-25 14:41 366,872 vccorlib140.dll
2020-09-25 14:41 85,784 vcruntime140.dll
6 File(s) 1,650,832 bytes
2 Dir(s) 57,822,343,168 bytes free
C:\Users\Liu.D.H>dir "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Redist\MSVC\14.27.29016\x64\Microsoft.VC142.CRT"
Volume in drive C is System
Volume Serial Number is 0CAC-076E
Directory of C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Redist\MSVC\14.27.29016\x64\Microsoft.VC142.CRT
2020-09-25 13:07 <DIR> .
2020-09-25 13:07 <DIR> ..
2020-09-25 13:07 317,224 concrt140.dll
2020-09-25 13:07 590,632 msvcp140.dll
2020-09-25 13:07 31,528 msvcp140_1.dll
2020-09-25 13:07 193,832 msvcp140_2.dll
2020-09-25 13:07 27,936 msvcp140_codecvt_ids.dll
2020-09-25 13:07 337,696 vccorlib140.dll
2020-09-25 13:07 101,672 vcruntime140.dll
2020-09-25 13:07 44,328 vcruntime140_1.dll
8 File(s) 1,644,848 bytes
2 Dir(s) 57,822,343,168 bytes free
C:\Users\Liu.D.H>
Because I can't install 2015 files. I extract it (D:\apps\wix311-binaries\dark.exe -nologo -x "D:\tmp\vcredist_x64-2015" "C:\Users\Liu.D.H\Downloads\vc_redist.x64-2015.exe"
) and you can find the files below.
liudonghua@desktop-ldh:/mnt/d/tmp/vcredist_x64-2015$ /usr/bin/tree .
.
├── AttachedContainer
│ └── packages
│ ├── Patch
│ │ ├── x64
│ │ │ ├── Windows6.0-KB2999226-x64.msu
│ │ │ ├── Windows6.1-KB2999226-x64.msu
│ │ │ ├── Windows8-RT-KB2999226-x64.msu
│ │ │ └── Windows8.1-KB2999226-x64.msu
│ │ └── x86
│ │ ├── Windows6.0-KB2999226-x86.msu
│ │ ├── Windows6.1-KB2999226-x86.msu
│ │ ├── Windows8-RT-KB2999226-x86.msu
│ │ └── Windows8.1-KB2999226-x86.msu
│ ├── vcRuntimeAdditional_amd64
│ │ ├── cab1
│ │ │ ├── mfc140.dll
│ │ │ ├── mfc140chs.dll
│ │ │ ├── mfc140cht.dll
│ │ │ ├── mfc140deu.dll
│ │ │ ├── mfc140enu.dll
│ │ │ ├── mfc140esn.dll
│ │ │ ├── mfc140fra.dll
│ │ │ ├── mfc140ita.dll
│ │ │ ├── mfc140jpn.dll
│ │ │ ├── mfc140kor.dll
│ │ │ ├── mfc140rus.dll
│ │ │ ├── mfc140u.dll
│ │ │ ├── mfcm140.dll
│ │ │ └── mfcm140u.dll
│ │ ├── cab1.cab
│ │ └── vc_runtimeAdditional_x64.msi
│ └── vcRuntimeMinimum_amd64
│ ├── cab1
│ │ ├── api_ms_win_core_console_l1_1_0.dll
│ │ ├── api_ms_win_core_datetime_l1_1_0.dll
│ │ ├── api_ms_win_core_debug_l1_1_0.dll
│ │ ├── api_ms_win_core_errorhandling_l1_1_0.dll
│ │ ├── api_ms_win_core_file_l1_1_0.dll
│ │ ├── api_ms_win_core_file_l1_2_0.dll
│ │ ├── api_ms_win_core_file_l2_1_0.dll
│ │ ├── api_ms_win_core_handle_l1_1_0.dll
│ │ ├── api_ms_win_core_heap_l1_1_0.dll
│ │ ├── api_ms_win_core_interlocked_l1_1_0.dll
│ │ ├── api_ms_win_core_libraryloader_l1_1_0.dll
│ │ ├── api_ms_win_core_localization_l1_2_0.dll
│ │ ├── api_ms_win_core_memory_l1_1_0.dll
│ │ ├── api_ms_win_core_namedpipe_l1_1_0.dll
│ │ ├── api_ms_win_core_processenvironment_l1_1_0.dll
│ │ ├── api_ms_win_core_processthreads_l1_1_0.dll
│ │ ├── api_ms_win_core_processthreads_l1_1_1.dll
│ │ ├── api_ms_win_core_profile_l1_1_0.dll
│ │ ├── api_ms_win_core_rtlsupport_l1_1_0.dll
│ │ ├── api_ms_win_core_string_l1_1_0.dll
│ │ ├── api_ms_win_core_synch_l1_1_0.dll
│ │ ├── api_ms_win_core_synch_l1_2_0.dll
│ │ ├── api_ms_win_core_sysinfo_l1_1_0.dll
│ │ ├── api_ms_win_core_timezone_l1_1_0.dll
│ │ ├── api_ms_win_core_util_l1_1_0.dll
│ │ ├── api_ms_win_crt_conio_l1_1_0.dll
│ │ ├── api_ms_win_crt_convert_l1_1_0.dll
│ │ ├── api_ms_win_crt_environment_l1_1_0.dll
│ │ ├── api_ms_win_crt_filesystem_l1_1_0.dll
│ │ ├── api_ms_win_crt_heap_l1_1_0.dll
│ │ ├── api_ms_win_crt_locale_l1_1_0.dll
│ │ ├── api_ms_win_crt_math_l1_1_0.dll
│ │ ├── api_ms_win_crt_multibyte_l1_1_0.dll
│ │ ├── api_ms_win_crt_private_l1_1_0.dll
│ │ ├── api_ms_win_crt_process_l1_1_0.dll
│ │ ├── api_ms_win_crt_runtime_l1_1_0.dll
│ │ ├── api_ms_win_crt_stdio_l1_1_0.dll
│ │ ├── api_ms_win_crt_string_l1_1_0.dll
│ │ ├── api_ms_win_crt_time_l1_1_0.dll
│ │ ├── api_ms_win_crt_utility_l1_1_0.dll
│ │ ├── concrt140.dll
│ │ ├── msvcp140.dll
│ │ ├── ucrtbase.dll
│ │ ├── vcamp140.dll
│ │ ├── vccorlib140.dll
│ │ ├── vcomp140.dll
│ │ └── vcruntime140.dll
│ ├── cab1.cab
│ └── vc_runtimeMinimum_x64.msi
└── UX
├── 1028
│ ├── license.rtf
│ └── thm.wxl
├── 1029
│ ├── license.rtf
│ └── thm.wxl
├── 1031
│ ├── license.rtf
│ └── thm.wxl
├── 1036
│ ├── license.rtf
│ └── thm.wxl
├── 1040
│ ├── license.rtf
│ └── thm.wxl
├── 1041
│ ├── license.rtf
│ └── thm.wxl
├── 1042
│ ├── license.rtf
│ └── thm.wxl
├── 1045
│ ├── license.rtf
│ └── thm.wxl
├── 1046
│ ├── license.rtf
│ └── thm.wxl
├── 1049
│ ├── license.rtf
│ └── thm.wxl
├── 1055
│ ├── license.rtf
│ └── thm.wxl
├── 2052
│ ├── license.rtf
│ └── thm.wxl
├── 3082
│ ├── license.rtf
│ └── thm.wxl
├── BootstrapperApplicationData.xml
├── license.rtf
├── logo.png
├── manifest.xml
├── thm.wxl
├── thm.xml
└── wixstdba.dll
23 directories, 106 files
liudonghua@desktop-ldh:/mnt/d/tmp/vcredist_x64-2015$
The main files in 2015 are the following.
│ │ ├── concrt140.dll
│ │ ├── msvcp140.dll
│ │ ├── ucrtbase.dll
│ │ ├── vcamp140.dll
│ │ ├── vccorlib140.dll
│ │ ├── vcomp140.dll
│ │ └── vcruntime140.dll