Publish:

태그: , , ,

카테고리:

VSCode 에서 정적 라이브러리 사용하기

정적 라이브러리란?

우리가 사용하는 C++ 코드는 컴파일 과정을 거쳐 실행파일이 나오게 됩니다.

이 컴파일 과정은 간단하게 Preprocessing -> Compilation -> Assemble -> Linking 이다.

Assemble 단계에서 생성된 Object file 을 Linking 단계에서 필요한 라이브러리들과 연결시켜 하나의 실행파일을 만든다.

이 때 연결되는 라이브러리가 Static Library 인데 실행파일의 일부가 된다.

VS Code 에서는 우리가 직접 라이브러리를 연결시켜 주어야 한다.

cmake

CMake 는 빌드 파일을 생성해주는 프로그램이다.

VS Code 에서는 우리가 원하는 라이브러리를 자동으로 Link 해주지 못하기 때문에

CMake 를 통해 Link 해주고 빌드 파일을 생성한다.

Linking

다음과 같은 프로젝트가 있다.

1

Server 스크립트에서 ServerLib 폴더의 Lib 라이브러리를 가져와 사용할 것이다.

Lib.h

1
void hello_lib();

Lib.cpp

1
2
3
4
5
6
#include "Lib.h"
#include <iostream>

void hello_lib() {
    std::cout << "Hello, I'm Lib" << std::endl;
}

server.cpp

1
2
3
4
5
6
7
#include <iostream>
#include "../ServerLib/Lib.h"

int main() {
    hello_lib();
    return 0;
}

이렇게 작성 후 빌드를 하면 오류가 발생한다.

linker command failed 라고 Linking 단계에서 실패한 것을 볼 수 있다.

이를 CMake 로 해결해보자.

CMake 를 통해 Linking 을 할 때 우리가 작성해야 할 스크립트가 있다.

바로 CMakeLists.txt 이다.

실행할 스크립트가 있는 폴더 (Server) 로 가서 CMakeLists.txt 파일을 만든다.

이제 터미널을 열고 Server 폴더 (CMakeLists.txt 파일이 있는 경로) 로 이동한다.

1

Server 폴더로 이동 후 cmake . 명령어를 실행시키면 다음과 같이 진행되고

2

Server 폴더에 많은 파일들이 생긴다.

자동완성을 사용하여 CMakeLists 파일을 작성해보자.

1
2
3
4
5
6
7
8
9
10
11
12
# 최소버전 입력
cmake_minimum_required(VERSION 3.0.0)
# 프로젝트 정보
# 프로젝트 버전 / 사용하는 언어 (C = C , CXX = C++)
project(Server VERSION 0.1.0 LANGUAGES C CXX)

# 실행 파일 이름 + 해당 실행 파일을 만드는데 필요한 소스
add_executable(Server Server.cpp)
# Lib.cpp 로 정적 라이브러리 Lib 을 만든다.
add_library(Lib STATIC ../Serverlib/Lib.cpp)
# Server 파일에 Lib 을 링크
target_link_libraries(Server Lib)

준비를 모두 마쳤으니 make 명령어로 빌드파일을 생성해보자.

3

생성한 Server 파일을 ./Server 명령어로 실행시키면 정상작동 하는 것을 볼 수 있다.

4

끝!

방문해 주셔서 감사합니다!😊

업데이트:

댓글남기기