중요하다
이 항목의 정보는 모든 버전의 Windows 10 이상에 적용됩니다. 여기서는 이러한 버전을 "Windows"라고 하며 필요한 경우 예외를 호출합니다.
우산 라이브러리는 연결하는 단일 라이브러리로, 선택한 Win32 API 하위 집합을 포함합니다. 예를 들어 OneCore.lib라는 우산 라이브러리는 모든 Windows 디바이스에 공통적인 Win32 API의 하위 집합을 포함합니다.
우산 라이브러리의 API는 모듈 범위(모듈이 API 집합 또는 DLL)에 걸쳐 구현될 수 있습니다. 그러나 통합 라이브러리는 그런 세부 사항을 개발자가 신경 쓰지 않도록 감춰 주어, 운영 체제 버전 전반에서 앱의 이식성을 높여 줍니다. 데스크톱 앱이나 드라이버에서 사용하려는 API 집합을 포괄하는 라이브러리를 링크하면, 그게 전부입니다.
통합 라이브러리가 포괄하는 내용
우산 라이브러리는 선택한 API 하위 집합을 포함합니다. 여기서 가져오는 각 모듈의 모든 API를 망라한 완전한 인덱스는 아니며, 특정 API가 모든 상위 라이브러리에 반드시 포함되는 것도 아닙니다.
라이브러리에서 다루는 API 집합은 빌드하는 Windows SDK 버전과도 관련이 있습니다. 이후 SDK는 이전 SDK에 없는 범위를 추가할 수 있습니다.
이러한 두 가지 이유로 개별 API에 대한 참조 페이지를 연결할 라이브러리의 권한으로 처리합니다. 해당 페이지의 요구 사항 테이블은 해당 API에 대한 라이브러리의 이름을 지정합니다.
사용 가능한 라이브러리
| 도서관 | 설명 |
|---|---|
| OneCore.lib | 모든 Windows 디바이스에 공통적인 Win32 API의 하위 집합을 다룹니다. 해당 API에 접근하려면 OneCore.lib만 링크하세요(다른 어떤 Win32 통합 라이브러리도 링크하지 마세요).
OneCore.lib를 링크하고 OneCore.lib에서 지원하는 Win32 API만 호출하면 데스크톱 앱 또는 드라이버가 모든 Windows 디바이스에서 문제없이 로드됩니다. |
| OneCore_apiset.lib |
OneCore.lib의 API 집합 변형입니다. API 집합 이름을 API에 사용할 수 있는 경우 직접 API 집합 가져오기를 통해 확인되므로 로드 시 중간 전달자 모듈이 관련되지 않습니다. 이를 링크하는 바이너리는 해당 바이너리가 가져오는 API 집합이 도입되기 전에 출시된 Windows 버전에서는 수정 없이 그대로 실행된다고 보장되지 않습니다. |
| OneCoreUAP.lib | WinRT(Windows 런타임)를 지원하는 모든 Windows 디바이스에 공통적인 Win32 API의 하위 집합을 다룹니다. 해당 API에 액세스하려면 OneCoreUAP.lib만 링크하고 다른 Win32 상위 라이브러리는 링크하지 마세요.
OneCoreUAP.lib를 연결하고 여기서 제공하는 Win32 API만 호출하면 데스크톱 앱 또는 드라이버가 WinRT를 지원하는 모든 Windows 장치에서 문제없이 로드됩니다. |
| OneCoreUAP_apiset.lib |
OneCoreUAP.lib의 API 집합 변형 API 집합 이름을 API에 사용할 수 있는 경우 직접 API 집합 가져오기를 통해 확인되므로 로드 시 중간 전달자 모듈이 관련되지 않습니다. 이를 링크하는 바이너리는 임포트하는 API 세트보다 이전에 출시된 Windows 버전에서 수정 없이 그대로 실행된다고 보장할 수 없습니다. |
이러한 라이브러리 중 두 가지를 하나의 이진 파일로 결합하지 마세요. 각 라이브러리는 이진 파일을 특정 API 표면으로 제한하기 위해 존재하며, 두 번째 라이브러리를 연결하면 해당 표면 외부의 API에 바인딩할 수 있습니다.
라이브러리와 해당 API 집합 변형 중에서 선택
두 변형이 모두 포함하는 API의 경우 두 가지는 런타임에 동일한 구현에 도달합니다. 달라지는 것은 최종적으로 바이너리의 가져오기 테이블에 들어가는 이름이며, 따라서 해당 바이너리가 실행될 수 있는 Windows 버전 범위도 달라집니다.
- 관련 API 집합이 존재하기 전에 릴리스된 Windows 버전에서도 실행되는 단일 이진 파일이 필요한 경우 일반 라이브러리(
OneCore.lib,OneCoreUAP.lib)를 연결합니다. 레거시 Windows 모듈 이름을 가져오며, 역방향 전달은 원래 모듈을 더 이상 포함하지 않는 에디션에서 해당 가져오기를 리디렉션합니다. - 바이너리가 현재 버전의 Windows를 대상으로 하는 경우 API 세트 변형(
OneCore_apiset.lib,OneCoreUAP_apiset.lib)을 연결합니다. API에 대해 사용할 수 있는 경우에는 API 집합 이름을 우선적으로 사용하므로, 가져오기가 구현을 호스팅하는 바이너리에 중간 포워더 없이 직접 확인되도록 합니다. 이것이 더 효율적인 형태입니다. API 집합 이름이 적용되지 않는 경우 일반 라이브러리와 동일한 모듈 이름을 사용합니다.
둘 다 호출할 수 있는 API를 변경하지 않습니다. 이로 인해 import 이름이 어떻게 지정되는지와 바이너리가 얼마나 이전 환경까지 실행될 수 있는지가 달라집니다.