컴퓨터 공학과를 졸업했지만 C++ 라이브러리는 stl만 사용해봤고 졸업후엔 주로 node.js나 프론트엔드 영역만 다루다 보니 C++에서 외부 라이브러리 사용해본적은 단 한번도 없었다.
이번에 그래픽스를 공부하면서 glfw 라이브러리를 사용해야 했는데 C++ 에서 외부 라이브러리를 import 하는 방법이 굉장히 신선하고 충격을 받아 정리하는 글이다.
Javascript에선 의존성은 node_modules에 모두 모여있고 npm, yarn같은 패키지 매니저를 사용하면 쉽게 라이브러리를 받을 수 있지만 C++에서는 링킹하는 과정이 필요하다.
이 과정을 이해하기 위해선 dll, lib에 대해서 이해해야한다.
.lib는 정적 라이브러리를 의미한다. lib 파일은 C++ 컴파일러가 컴파일 하고 나온 obj 파일을 링킹하는 과정에서 묶어 exe로 만드는 파일이다.
따라서 .lib은 컴파일에 성공하면 .exe파일에 모두 들어간다.
dll은 동적 라이브러리를 의미한다.
동적 라이브러리 답게 Runtime에서 dll 파일의 위치를 알아내서 링킹하는 라이브러리이다.
(dll이 프로세스 주소 공간에 동적 로드가 가능하다고 한다. )
실행파일에 어떤 dll을 사용할지 정보를 넣고, 사용하는 방법
오픈소스에선 대부분 암시적 링킹을 사용한다.
암시적 링킹은 dll, lib 둘을 사용한다.
lib 파일에는 dll 파일을 불러들이는 함수가 있고, 이를 동적으로 dll을 로드하는 방법이라고한다.
동적으로 사용하고자 하는 dll 함수를 불러와 쓰는 방법이다.
대부분 암시적 링킹을 사용하고 있다.
라이브러리를 import 하기 위해선
위 3가지 파일을 링크 시켜야 하고 이는 visual studio를 통해서 적용할 수 있다.
헤더는 속성 > C++ > 일반 > 추가 포함 디렉토리 에서 .h 파일이 모여있는 폴더 경로를 적용하면 된다.

lib는 2번 설정 해야한다.


dll은 디버깅 > 환경에 dll 폴더 위치를 적용하면 된다.
dll은 "반드시" 프로젝트 폴더와 같은 경로에 있어야 한다.

위 방법은 라이브러리를 한땀한땀 링킹 해줘야한다.
분명 휴먼 에러가 날 수 밖에 없고.. 에러를 찾는것도 어려워 보이니 vcpkg를 쓰는걸 권장한다.
vcpkg install glfw3
vcpkg integrate install
명령을 사용하면 vcpkg를 통해서 받은 라이브러리를 바로 visual studio code에 적용하는것이 가능하다.
누가 웹 환경이 복잡하다고 했는가...
웹 개발 환경은 쉽고 간편하고 직관적인 정말 축복받은 환경이다...
lib 이미지로 볼수있나요?