본문 바로가기
Unreal/C++ 서버

라이브러리를 링크하지 않고 헤더파일만 가지고도 빌드되는 이유

by 보안매크로 2024. 4. 7.
728x90

라이브러리를 링크하지 않고 헤더 파일(.h)만 #include 하여도 실행이 되는 경우는 몇 가지가 있습니다:

  1. 헤더 전용 라이브러리 (Header-Only Libraries): 일부 라이브러리는 "헤더 전용" 형태로 제공됩니다. 이러한 라이브러리는 모든 구현이 헤더 파일 내에 포함되어 있으므로 별도의 링킹이 필요하지 않습니다. 예를 들어, 많은 템플릿 기반 라이브러리들이 이 방식을 사용합니다.
  2. Inline 함수나 템플릿: 헤더 파일 내에 inline 함수나 템플릿 함수가 정의되어 있을 경우, 이들은 각 소스 파일에 직접 포함되어 컴파일됩니다. 이 경우 별도의 링킹이 필요하지 않습니다.
  3. 정적 라이브러리의 자동 링킹: 일부 정적 라이브러리는 헤더 파일 내에서 특정 지시문을 사용하여 컴파일러에게 자동으로 라이브러리를 링크하도록 지시할 수 있습니다. Visual Studio에서는 #pragma comment(lib, "libraryname.lib") 지시문을 사용하여 이를 수행할 수 있습니다.
  4. 프로젝트 설정에 이미 포함된 라이브러리: 프로젝트 설정이나 개발 환경에서 이미 특정 라이브러리가 링크되도록 설정되어 있을 수 있습니다. 예를 들어, 개발 환경의 전역 설정이나 빌드 스크립트에서 라이브러리를 링크하도록 구성했을 수 있습니다.
  5. 표준 라이브러리나 시스템 라이브러리: 표준 C++ 라이브러리나 시스템 라이브러리의 경우, 컴파일러나 개발 환경에 기본적으로 포함되어 있으므로 별도의 링킹이 필요하지 않습니다.
  6. 동적 로딩: 동적 라이브러리(.dll, .so 등)의 경우, 프로그램이 실행 중에 명시적으로 라이브러리를 로드하고 함수를 찾아 사용할 수 있습니다. 이 경우 컴파일 타임에 링킹이 필요하지 않습니다.

헤더 파일만 #include하여도 프로그램이 정상적으로 실행되는 경우는 주로 이러한 이유들 중 하나에 해당합니다.

728x90