프로그래밍 Part 2: 외부 라이브러리¶
Caution
리눅스를 위한 가이드입니다. 윈도우즈인 경우 Visual Studio 기능을 사용해 주세요.
게임 서버를 작성하기 위해서는 여러 가지 기능이 필요합니다. 또한, 퍼블리셔나 플랫폼 규약에 맞추기 위한 기능도 추가해야할 수 있습니다. 이를 위해서 외부 라이브러리를 연동해서 써야하는 경우가 생깁니다. 이런 경우, 다음과 같은 과정을 통해서 외부 라이브러리를 사용할 수 있습니다.
여기서는 예제로 sodium 이라는 암호화 라이브러리를 링크합니다.
외부 라이브러리 설치¶
사용하려는 라이브러리를 설치합니다. 대개의 경우 Ubuntu 나 Centos 패키지로 라이브러리가 존재할 확률이 높습니다. 이처럼 해당 라이브러리 패키지가 존재하는 경우, OS 의 패키지 매니저 (Ubuntu 의 경우 apt
, Centos 의 경우 yum
) 을 쓰시는 것이 편리합니다.
Note
Ubuntu 나 Centos 의 경우, 라이브러리 파일을 포함하는 패키지와 헤더 파일까지 포함하는 패키지를 구분해서 제공하는 경우가 많습니다. 게임 서버가 일단 빌드 된 후에는 라이브러리 패키지만 있어도 되지만, 게임 서버를 빌드 하기 위해서는 (즉, 컴파일하기 위해서는) 헤더 파일 패키지까지 설치해야됩니다. 보통 Ubuntu 에서는 헤더 파일 패키지의 경우 -dev
라는 이름으로 끝나는 패키지로 존재하고, Centos 의 경우 -devel
이라는 이름으로 끝나는 패키지로 제공됩니다.
sodium 의 경우는 다음과 같습니다:
Ubuntu
$ sudo apt-get install libsodium-dev
CentOS
$ sudo yum install libsodium-devel
CMakeLists.txt 에 추가¶
funapi_initiator
로 생성된 소스 디렉터리에는,
CMakeLists.txt
src/CMakeLists.txt
이렇게 두 개의 빌드 설정 파일이 있습니다.
두 번째 파일인 src/CMakeLists.txt
를 수정해서 다음의 내용을 추가합니다.
자세한 내용은 코드 뒤에 계속 설명합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | ...
###############################################################################
# Inclusion after setting variables.
###############################################################################
set(CMAKE_MODULE_PATH "/usr/share/funapi/cmake")
include(Funapi-src)
###############################################################################
# 추가 라이브러리 링크하기 위한 섹션
###############################################################################
# libsodium 라이브러리를 찾아서 LIBSODIUM 에 저장한다.
find_library(
LIBSODIUM
NAMES libsodium.so
HINTS /usr/lib /usr/lib64
REQUIRED)
# 위의 LIBSODIUM 에 저장되어있는 경로를 링크 대상으로 추가한다.
target_link_libraries(${PROJECT_NAME} ${LIBSODIUM})
...
|
라이브러리 찾기¶
cmake 의 find_library 를 이용해서 라이브러리를 찾습니다. 위에 사용된 find_library
의 인자에 대한 설명은 다음과 같습니다.
LIBSODIUM: 라이브러리 위치를 저장할 변수 이름입니다. 사용하기 적절한 이름을 선택합니다.
NAMES {라이브러리 파일 이름}: 라이브러리 파일의 실제 이름입니다. 정적 라이브러리라면
.so
가 아니라.a
로 끝나는 파일을 지정합니다.HINTS {라이브러리 디렉터리}: 라이브러리가 표준 경로가 아닌 다른 곳에 설치된 경우라면 해당 경로를 지정해야 합니다. 표준 경로에 설치된 경우 생략할 수 있습니다.
REQUIRED: 해당 라이브러리가 없으면 빌드가 실패하도록 설정합니다.
라이브러리 링크하기¶
cmake 의 target_link_libraries 를 이용해서 해당 라이브러리를 실제로 링크합니다.
앞에서 지정한 이름 부분 (위의 예에서는 LIBSODIUM
) 을 인자로 전달하면 링커가 링크할 때 해당 라이브러리를 추가합니다.
서비스 환경에 배포¶
target_link_libraries
를 사용하고, 서버 관리 Part 3: 서버 패키징 에 설명된 대로 게임 서버를 패키징하면, 사용한 라이브러리에 대한 의존성이 자동으로 추가됩니다.
이제 .deb 나 .rpm 으로 생성된 게임 서버를 설치하게 되면, OS 에서 우리가 추가한 library 가 설치되어있는지를 확인하고, 만일 설치되어있지 않다면 오류 메시지를 내면서 게임 서버 패키지 설치를 거부합니다. 이를 통해 필요한 라이브러리가 누락된 것을 금새 알 수 있습니다.
이런 오류 메시지가 발생하는 경우, 외부 라이브러리 설치 에서 한 것처럼 필요한 라이브러리를 설치해주면 됩니다. 위에서 예로 든 libsodium 의 경우, 다음과 같이 라이브러리를 설치하실 수 있습니다.
Ubuntu
$ sudo apt-get install libsodium18
Note
Ubuntu 버전에 따라 18 대신 다른 숫자일 수 있습니다.
CentOS
$ sudo yum install libsodium
Tip
게임 서버 빌드를 마치고 이를 라이브 서버에 배포하는 상황이기 때문에 -dev
나 -devel
같은 개발 패키지는 설치하지 않아도 됩니다.