2017-02-01 60 views
5

Rozumiem, że (z godnym uwagi wyjątkiem od VS2015 do VS2017) Microsoft sprawia, że ​​ABI łamie zmiany między każdą wersją biblioteki narzędziowej Visual C++. Więc jeśli chcę rozpowszechniać binarną wersję biblioteki, muszę rozpowszechniać osobną wersję tej dla każdej nowej wersji VS, którą chcę obsłużyć.ABI-Kompatybilność bibliotek Visual Studio c

Teraz moje pytania to:

  • Czy to jest również prawdziwe dla czystym C-bibliotek?
  • Czy odpowiedź różni się między bibliotekami dll i bibliotekami statycznymi?
  • Czy istnieje oficjalna polityka ze strony PC na temat tego, czego chcą w przyszłości?

(w szczególności w świetle refactoring and stabilization of the crt)

Jeśli jest to istotne, że będę zadowolony z odpowiedzi właściwych dla Win10, ale jestem również zainteresowany wszystkich wersjach Windows od (włącznie) Win7. Wersje VS Studio, które mnie interesują to VS2013/15/17 i - o ile można przewidzieć - przyszłe wydania.

+2

Czysta 'C' jest stabilny (odkryli oświadczenie w przeszłości - jeśli znajdę to znowu będzie księguje jako odpowiedź). Zauważ, że wszystkie metody Win32API (w tym COM) są eksportowane jako 'C'. Dokonanie przełomowej zmiany w 'C' ABI spowodowałoby przerwanie wszystkich połączeń w systemie operacyjnym. –

+0

@RichardCritten: Dziękuję bardzo. Tego właśnie oczekiwałem, ale nie mogłem znaleźć oficjalnej dokumentacji. Byłoby wspaniale, gdybyś mógł znaleźć jego źródło, ale bez niego też bym zaakceptował twoją odpowiedź. – MikeMB

Odpowiedz

0

ABI czystego C jest z pewnością stabilne. Możesz mieszać biblioteki DLL utworzone w różnych wersjach VisualStudio, pod warunkiem, że masz również poprawne zależności MSVCRT * (nie dotyczy to, jeśli oczywiście zbudujesz je ze statycznym libc).

Jednak trzeba zachować szczególną ostrożność w podejmowaniu wskaźnik wokół (patrz http://siomsystems.com/mixing-visual-studio-versions/ a także Library ABI compatibility between versions of Visual Studio)