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

.h 파일과 .lib 차이, .h는 있고, .cpp는 없는데 include 가능한 이유

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

 mysql_connection.h와 같은 헤더 파일을 포함하고 사용할 때, 실제 구현이 담긴 mysql_connection.cpp 파일을 직접 다운로드하지 않았는데 볼 수 있는 이유는?

1. 미리 컴파일된 라이브러리

mysql_connection.h와 같은 라이브러리 헤더 파일을 사용할 때, 일반적으로 해당 라이브러리의 구현은 미리 컴파일되어 라이브러리 파일 형태(예: .lib, .dll, .so 등)로 제공됩니다. 이러한 라이브러리 파일은 이미 컴파일된 바이너리 코드를 포함하고 있으며, 이 파일들이 실제 함수의 구현을 담고 있습니다.

2. 링커의 역할

프로그램을 컴파일할 때, 컴파일러는 헤더 파일의 선언을 참조하여 소스 코드를 컴파일합니다. 이후 링킹 과정에서 링커는 이러한 컴파일된 코드와 미리 컴파일된 라이브러리 파일을 연결합니다. 즉, 링커가 mysql_connection.h에 선언된 함수와 변수에 대한 실제 구현을 라이브러리 파일에서 찾아 연결하는 것입니다.

3. 프로젝트 설정

Visual Studio와 같은 개발 환경에서 프로젝트를 설정할 때, 이러한 라이브러리 파일들의 위치를 지정해야 합니다. 이는 일반적으로 프로젝트 설정의 "라이브러리 디렉토리"에 해당 라이브러리 파일의 경로를 추가하고, "추가 종속성"에 필요한 라이브러리 파일 이름을 명시함으로써 이루어집니다.

4. 라이브러리 배포 방식

대부분의 상용 또는 오픈 소스 라이브러리는 사용자가 소스 코드를 직접 컴파일할 필요 없이 바로 사용할 수 있도록 미리 컴파일된 형태로 제공됩니다. 이는 사용자가 라이브러리의 복잡한 빌드 과정을 거치지 않고도 쉽게 라이브러리를 사용할 수 있게 해줍니다.

결론적으로, mysql_connection.h와 같은 헤더 파일을 포함하는 것은 해당 라이브러리의 API에 대한 선언을 참조하기 위한 것이며, 실제 구현은 미리 컴파일된 라이브러리 파일에서 제공되므로 개발자는 구현 코드를 직접 다룰 필요가 없습니다.

728x90