인프런 커뮤니티 질문&답변

akrhwkwk님의 프로필 이미지
akrhwkwk

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12

프로젝트 설정

라이브러리 디렉터리는 왜 추가해야하나요?

작성

·

1.6K

0

#pragma comment(lib, "Engine.lib") 문장을 통해서 Client프로젝트에게 라이브러리 경로를 알려준 것이라고 생각하는데 왜 라이브러리 디렉터리도 추가해주어야 하나요?

 

그리고 프로젝트 속성 -> 구성속성 ->VC++ 디렉터리 에서 포함 디렉터리와 라이브러리 디렉터리를 변경해주는 것과

프로젝트 속성 -> 링커 -> 일반 -> 추가 라이브러리 디렉터리, 입력 -> 추가 종속성은 어떻게 다른가요?

 

궁금합니다.

답변 3

2

akrhwkwk님의 프로필 이미지
akrhwkwk
질문자

답변 정말루 감사드립니다. 강의도 잘 보고있읍니다.

그런데 제 질문의 요지와 약간 어긋난 답변을 주신 것 같습니다. 아니면 제가 아직 이해를 잘 못하고있던가요 ㅠㅠ...

 

첫 번째 질문에 대해서는,

왜 라이브러리 파일과 헤더 파일 둘 다를 포함해야 하느냐는 질문이 아닌, 

프로젝트 속성 -> 구성속성 ->VC++ 디렉터리 의 라이브러리 디렉터리 를 통해 라이브러리 경로를 알려줬는데,  #pragma comment(lib, "Engine.lib")  문장을 통해 라이브러리 경로를 또 알려주어야 하는지? 에 대한 질문이었습니다.

제가 이해하기론 위 두 과정을 모두 수행해야만 제대로 빌드 되는 것 같은데, 제가 뭔가 잘못 이해하고 있는건가요? 

 

그리고 두 번째 질문에 대해서는 그냥 단순히 두 방법이 완전히 같은 기능을 한다고 이해하면 될까요?

Rookiss님의 프로필 이미지
Rookiss
지식공유자

아 죄송합니다~ 질문을 잘못 이해했네요.
VS 설정에서 우리가 잡아주는 라이브러리 디렉터리 경로는
[해당 경로에 있는 모든 라이브러리 파일을 사용한다]가 아니라
[이 위치에서 라이브러리 파일들을 찾아보겠다]에 가깝습니다.

#pragma comment(lib, "Engine.lib")
그리고 위 아이는 Engine.lib을 사용하겠다는 의미입니다.
Engine.lib을 사용하는건 맞는데 그게 어디 있는지는 지정한 적 없는데,
컴파일러가 위에서 잡아준 경로들을 하나씩 스캔해보면서 Engine.lib을 찾게 됩니다.

따라서 둘다 해주는게 맞구요.
코드상에서 #pragma comment(lib)을 사용하지 않고 직접 프로젝트 설정에 가서
[링커->입력->추가 족속성] 쪽에 수동으로 Engine.lib을 추가해줄 수도 있긴 합니다.

그리고 lib 경로를 알려주는 2 방법 중 무엇을 사용해도 결과는 동일합니다.
(하나는 /LIB 하나는 /LIBPATH를 설정하는 것이라 서칭 시점이 다를텐데 크게 중요하지 않습니다)

0

akrhwkwk님의 프로필 이미지
akrhwkwk
질문자

아하!

이해가 잘 되는 설명이었읍니다. 정말 감사합니다.

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

Engine.lib은 실행되어야 하는 코드들이 들어간 일종의 바이너리 파일입니다. (exe처럼)
그런데 C++의 빌드 과정을 생각해보면,
모든 cpp 파일들이 독립적으로 빌드되면서 obj파일로 만들어지고
이를 최종적으로 링크 단계에서 합쳐서 결과물을 만드는데요.
A.cpp에서 B.h에 들어가 있는 함수를 호출한다면, #include "B.h"를 합니다.
왜냐하면 해당 함수의 자세한 내용은 모르더라도
함수의 시그니처는 알아야 정상적으로 코드를 만들어줄 수 있기 때문입니다.
(스택 프레임 구성 원리를 생각해보면, 그럴 수 밖에 없죠)
그리고 해당 함수의 자세한 코드들은 B.cpp가 빌드되면서 만들어지겠죠.

결과적으로 헤더파일의 역할과 바이너리의 역할이 구분되는 것처럼
결과물에 해당하는 lib파일 말고도 헤더 파일들을 알아야 할 필요가 있습니다.
C++ 컴파일 단계는 조금 복잡하게 되어 있으니
깊이 이해할 필요는 없고 그냥 공식처럼 사용해도 무방합니다.

헤더나 라이브러리 파일 위치를 알려주는 방법은 여러가지인데
어떤 것을 사용하더라도 무방합니다.

akrhwkwk님의 프로필 이미지
akrhwkwk

작성한 질문수

질문하기