다음을 통해 공유


Visual Studio 버전 간의 C++ 이진 호환성

Visual Studio 2013 이하의 MSVC(Microsoft C++) 빌드 도구는 주 버전 간에 이진 호환성을 보장하지 않습니다. 이러한 빌드 도구의 다른 버전에서 빌드한 개체 파일, 정적 라이브러리, 동적 라이브러리 및 실행 파일을 연결할 수 없습니다. ABI, 개체 형식 및 런타임 라이브러리는 호환되지 않습니다.

Visual Studio 2015 및 그 이상 버전에서 이 동작을 변경했습니다. 이러한 버전의 컴파일러에서 컴파일한 런타임 라이브러리 및 앱은 이진 호환됩니다. Visual Studio 2015 이후 모든 버전에 대해 14로 시작하는 MSVC 빌드 도구 주 번호에 반영됩니다. 빌드 도구 버전은 Visual Studio 2015용 v140, 2017용 v141, 2019의 경우 v142, 2022의 경우 v143입니다. Visual Studio 2015에서 빌드한 타사 라이브러리가 있다고 가정해 보겠습니다. Visual Studio 2017, 2019, 2022 또는 2026에서 빌드한 애플리케이션에서 계속 사용할 수 있습니다. 일치하는 버전으로 다시 컴파일할 필요가 없습니다. Microsoft Visual C++ 재배포 가능 패키지(재배포 가능 패키지)의 최신 버전은 모든 경우에 작동합니다.

이진 호환성에 대한 제한 사항

v140, v141, v142, v143 및 v145 빌드 도구와 부 번호가 매겨진 버전 업데이트 간의 이진 호환성에 대한 세 가지 중요한 제한 사항이 있습니다.

  • v140, v141, v142, v143 및 v145 빌드 도구의 다른 버전으로 만든 이진 파일을 결합할 수 있습니다. 키 규칙은 링커가 자체 버전(또는 이전 버전)인 빌드 도구에서 빌드한 입력만 사용해야 한다는 것입니다. 이는 LINK 입력 파일에 설명된 대로 앱, 가져오기 라이브러리, 정적 라이브러리 및 기타 파일에 적용됩니다. 경우에 따라 빌드 도구의 이후 버전에서 빌드된 암시적으로 연결된 DLL에 대한 가져오기 라이브러리는 이전 버전의 빌드 도구를 사용하여 연결할 수 있습니다. 특히 가져오기 라이브러리가 가져오기/내보내기를 위해 엄격하게 사용하는 extern "C" 경우 특히 그렇습니다. 다음은 이 모든 것이 의미하는 바에 대한 몇 가지 예입니다.
    • 2017 빌드 도구(v141, 버전 15.0~15.9)로 컴파일된 앱은 Visual Studio 2022 버전 17.8(v143)으로 컴파일된 정적 라이브러리에 연결할 수 있지만, 버전 17.8 이상 빌드 도구를 사용하여 연결을 수행해야 합니다.
    • VS 2015, 2017, 2019, 2022 및 2026을 사용하여 빌드된 앱 및 라이브러리는 함께 연결할 수 있습니다. 그러나, 연결은 링커에 전달하는 모든 이진 파일을 빌드하는데 사용된 가장 최신의 빌드 도구보다 최신이거나 같은 버전의 빌드 도구를 사용하여 수행해야 합니다. 예를 들어 VS 2015 버전 14.3, VS 2017 버전 15.9 및 VS 2019 버전 16.11의 빌드 도구로 빌드된 세 개의 이진 파일을 사용하면 16.11 이상의 빌드 도구 버전을 사용하여 연결할 수 있습니다.
    • 최신 빌드 도구를 사용하여 DLL을 빌드하는 경우 모든 내보내기가 C 언어 호출 규칙(extern "C")을 따르는 경우 가져오기 라이브러리를 이전 빌드 도구와 함께 사용할 수 있습니다. 그러나 공식적으로 지원되는 유일한 사례는 이전 빌드 도구와 함께 최신 Windows SDK를 사용하는 것입니다.
  • 앱에서 사용하는 재배포 가능 패키지에는 유사한 이진 호환성 제한 사항이 있습니다. 지원되는 다른 버전의 빌드 도구에서 빌드된 이진 파일을 혼합하는 경우 재배포 가능 버전은 적어도 모든 앱 구성 요소에서 사용하는 최신 빌드 도구만큼 새 버전이어야 합니다.
  • /GL(전체 프로그램 최적화) 컴파일러 스위치를 사용하여 컴파일되거나 /LTCG(링크 시간 코드 생성)을 사용하여 연결된 정적 라이브러리나 개체 파일은 부 버전 업데이트를 포함하여 버전 간에 이진 호환되지 않습니다. 모든 오브젝트 파일과 라이브러리는 /GL/LTCG을 사용하여 컴파일되며, 컴파일 및 최종 링크에는 정확히 동일한 빌드 도구를 사용해야 합니다. 예를 들어 Visual Studio 2019 버전 16.7 빌드 도구에서 사용하여 /GL 빌드한 코드는 Visual Studio 2019 버전 16.8 빌드 도구를 사용하여 /GL 빌드된 코드에 연결할 수 없습니다. 이럴 경우 컴파일러가 심각한 오류 C1047를 내보냅니다.

Visual Studio 2015 이상에서의 Microsoft Visual C++ 재배포 가능 패키지 업그레이드

Microsoft Visual C++ 재배포 가능 주 버전 번호는 Visual Studio 2015, 2017, 2019, 2022 및 2026과 동일하게 유지되었습니다. 즉, 한 번에 하나의 재배포 가능 패키지 인스턴스만 설치할 수 있습니다. 최신 버전은 이미 설치된 이전 버전을 덮어씁니다. 예를 들어 하나의 앱이 Visual Studio 2015에서의 재배포 가능 패키지를 설치한다고 가정해 봅시다. 그런 다음, 다른 앱이 Visual Studio 2026에서 재배포 가능 패키지를 설치합니다. 2026 버전은 이전 버전을 덮어쓰지만 이진 호환이 가능하기 때문에 이전 앱은 여전히 정상적으로 작동합니다. 재배포 가능 패키지의 최신 버전에는 최신 기능, 보안 업데이트 및 버그 수정이 모두 포함되어 있는지 확인합니다. 따라서 항상 사용할 수 있는 최신 버전으로 업그레이드하는 것이 좋습니다.

마찬가지로 최신 버전이 이미 설치된 경우에는 이전 재배포 가능 패키지를 설치할 수 없습니다. 시도할 경우에는 설치 관리자가 오류를 보고합니다. 예를 들어 2026 버전이 이미 있는 컴퓨터에 2022 재배포 가능 파일을 설치하면 다음과 같은 오류가 표시됩니다.

0x80070666 - Another version of this product is already installed. Installation of this version cannot continue. To configure or remove the existing version of this product, use Add/Remove Programs on the Control Panel.

이 오류는 의도적으로 설계된 것입니다. 최신 버전을 설치해 두시기 바랍니다. 설치 프로그램이 이 오류에서 자동으로 복구될 수 있는지 확인합니다.

중요합니다

Windows XP용 런타임 라이브러리 지원은 Visual Studio용 최신 Visual C++ 재배포 가능 패키지에서 더 이상 사용할 수 없습니다. Windows XP를 지원하는 마지막 재배포 가능 패키지는 버전 16.7(파일 버전 14.27.29114.0)입니다. Windows XP 앱이 이후 버전의 재배포 가능 패키지로 배포되거나 업데이트되는 경우 앱이 실행되지 않습니다. 자세한 내용 및 Windows XP를 지원하는 재배포 가능 패키지 버전을 가져오는 방법은 Windows XP용 프로그램 구성을 참조하세요.

참고 항목

Visual C++ 변경 기록
지원되는 최신 Visual C++ 재배포 가능 패키지 다운로드
Visual C++ 런타임 버전 사용량 감사하는 방법
수명 주기 FAQ - Visual C++ 재배포 가능 및 런타임 라이브러리