21

Steve tells me rằng VC 2015 và VC 2017 thực sự (sẽ là) tương thích nhị phân.Là Visual-C++ - 2017 nhị phân tương thích với VC++ - 2015?

Tôi tìm thấy zero thông tin wrt. này trong release notes for 2017 (RC) - hoặc khá nhiều bất cứ nơi nào cho rằng vấn đề, vì vậy ở đây đi:

  • Là một C++ (C++ interface) DLL xây dựng với VC++-2017 tương thích nhị phân với một DLL được xây dựng bởi VC++ - 2015?
  • Năm 2017 và 2015 sử dụng cùng một (động) runtime library?
  • Nếu có, điều gì, nếu có, là thời gian hoạt động khác biệt giữa Platform Toolset Visual Studio 2017 (v141)Visual Studio 2015 (v140)? (*)

(*): Vâng, tôi thực sự đã đi trước và cài đặt 2017 RC, và từ những gì tôi có thể nhìn thấy trên bề mặt, ít nhất là giống hệt MSVCRT được sử dụng, đó là msvcp140.dllvcruntime140.dll (mặc dù bộ công cụ nền tảng được gọi là "v141".

Trả lời

19

Có, các thư viện 141 và 140 gần như giống nhau. Phiên bản này đã gặp vấn đề cạnh tranh. Bộ công cụ v140 trong VisualC++ 2015 và v141 bộ công cụ trong VC++ 2017 tương thích nhị phân.

+1

Đây có phải là trường hợp của VS2017 15.3 không? Chúng tôi đang gặp lỗi liên kết ("phiên bản trình biên dịch khác") với lib tĩnh năm 2015 ngay bây giờ. –

+0

Tôi không thể cài đặt ** VC++ 2015Redist ** trên máy có ** VC++ 2017Redist ** https://stackoverflow.com/questions/45967479/can-visual-c-2017- redistributable-package-support-the-applications-that-use-vc –

+2

Kevin, bạn có đang sử dụng các thư viện được biên dịch với/GL (codegen liên kết thời gian) không? Chúng không được hỗ trợ trên các phiên bản trình biên dịch chính. Họ đã làm việc với 15.0-15.2, nhưng đó chỉ là may mắn. – apardoe

1

Tóm lại, VC Runtime in MSVC 2017 is binary compatible with 2015

Hãy để tôi anwser câu hỏi của bạn từng người một.

  1. CÓ. Cả hai đều phụ thuộc vào msvcp140.dll và vcruntime140.dll. Nếu bạn có một thư viện được xây dựng với bộ công cụ nền tảng v140, mã nhị phân đó và mã của bạn tiêu thụ nó sẽ tiếp tục hoạt động ngay cả khi bạn đã xây dựng mã của mình bằng bộ công cụ MSVC v141. Nhưng hãy cẩn thận rằng, đối với bất kỳ dll/exe, nếu bất kỳ phần nào của nó được xây dựng với bộ công cụ MSVC v141, thì dll/exe cuối cùng phải được liên kết bởi bộ công cụ MS14 của v141.
  2. Không. Họ chia sẻ cùng một tên nhưng chúng không giống nhau. Các dlls từ VS 2017 là mới hơn.
  3. Có. Chúng là sự khác biệt. Mới hơn là tốt hơn.

VCRedist chỉ tương thích ngược, vì vậy bạn sẽ cần phải phân phối lại VCRedist mới nhất có sẵn trong VS 2017 với ứng dụng của bạn. Tại thời điểm này, từ những gì tôi biết, bạn vẫn có thể xây dựng một chương trình của VS 2017 nhưng chạy nó với thời gian chạy VC 2015. Nhưng không ai có thể đảm bảo rằng sẽ luôn luôn làm việc, bởi vì đội VS có thể thêm các biểu tượng xuất khẩu mới vào thời gian chạy VC của họ.

+0

Điểm tốt về việc đảm bảo cài đặt lại mới nhất. –

Các vấn đề liên quan