생각의 기록

꿈꾸는 개발자 하늘고래의 프로그래밍 이야기

Programming/C++

jsoncpp 사용하기 #1 - jsoncpp 라이브러리 빌드 및 프로젝트 구성

하늘고래c 2021. 12. 13. 21:35

개요

안녕하세요. 꿈꾸는 개발자 하늘고래입니다.

 

C++에서 JSON을 사용하기 위해서는 직접 데이터를 파싱하거나, 별도 라이브러리를 사용해야 합니다. C++에서 사용할 수 있는 라이브러리는 많이 있지만, 이번 강의에서는 제가 주로 사용하는 jsoncpp 라이브러리를 사용하여 JSON을 파싱하도록 하겠습니다.

 

이번 시간에는 joncpp 라이브러리를 정적 라이브러리로 빌드하고 다른 프로젝트에서 jsoncpp 라이브러리를 링크하여 사용하는 방법에 대해서 간단하게 설명하겠습니다.

 

개발 및 테스트 환경

이번 강의에서는 Visual Studio C++ 환경에서 정적 라이브러리를 만들고, 만든 라이브러리를 사용하여 JSON를 파싱하도록 하겠습니다.

 

이번 강의의 개발 및 테스트 환경은 다음과 같습니다. 

 

  • Windows 10 x64
  • Microsoft Visual Studio C++ 2019
  • CMake v3.22.0
  • jsoncpp v1.9.5

 

jsoncpp 소개

jsoncpp는 JSON을 쉽고 빠르게 제어할 수 있도록 다양한 기능을 제공하는 C++ 라이브러리입니다. 공식 사이트에서는 다음과 같이 소개하고 있습니다.

 

JsonCpp is a C++ library that allows manipulating JSON values, including serialization and deserialization to and from strings. It can also preserve existing comment in unserialization/serialization steps, making it a convenient format to store user input files.

 

jsoncpp 빌드

jsoncpp 다운로드

GitHub 페이지에서 Code를 클릭 후 소스를 내려받거나, git clone을 통해서 저장소를 복제하면 됩니다.

 

저는 대부분의 오픈 소스를 git clone으로 저장소 복제하기 때문에 이번 강의에서도 git clone으로 저장소 복제하는 방식으로 진행하도록 하겠습니다.

GitHub 사용하여 저장소 복제하기하기

 

우선 먼저 Git 주소를 복사합니다.

Code 버튼을 눌러 Git 주소 복사하기

 

GitHub Desktop에서 Clone a repository 메뉴를 통해 복사한 주소와 로컬 경로를 지정 후 jsoncpp를 복제합니다.

Clone a repository 사용하여 jsoncpp 저장소 복제하기

 

로컬 경로에 저장소 복제가 정상적으로 되었는지 확인합니다.

로컬 경로에 jsoncpp 저장소 복제 완료

 

빌드 프로젝트 생성

CMake를 사용하여 MSVC용 빌드 프로젝트를 생성하면 됩니다. 직접 콘솔에서 명령어를 입력하거나, CMake GUI를 사용하여 생성하면 됩니다. 이번 강의에서는 직접 명령어를 입력하여 빌드 프로젝트를 생성하겠습니다.

( CMake GUI를 통해서 빌드 프로젝트를 생성해도 됩니다. )

CMake 다운로드 - https://cmake.org 

 

콘솔 창을 띄우고 저장소를 복제한 로컬 경로도 이동하고, 다음과 같이 명령어를 입력하여 빌드 프로젝트를 생성합니다. 빌드 프로젝트는 여러분이 개발하는 환경에 맞게 생성해야 합니다.

( 저는 Visual Studio 2019 환경에서 사용하도록 설정하였습니다. )

CMake를 사용하여 빌드 프로젝트 생성

 

CMake를 사용하여 jsoncpp 빌드 프로젝트 생성하기

# CMake를 사용하여 jsoncpp 빌드 프로젝트 생성하기
cmake CMakeLists.txt -B [빌드 프로젝트 경로] -G [Generator] -A [Architecture]

# 예시 : Visual Studio 2019 x86
cmake CMakeLists.txt -B Build -G "Visual Studio 16 2019" -A Win32

# 예시 : Visual Studio 2019 x64
cmake CMakeLists.txt -B Build64 -G "Visual Studio 16 2019" -A Win64

 

만약, 여러분이 다른 컴파일러를 사용하여 개발한다면 [Generator]를 사용하는 컴파일러에 맞게 변경해야 합니다. cmake /? 명령을 통해 지원하는 Generator를 확인할 수 있습니다.

# MSVC Generators 예시

Visual Studio 17 2022 = Generates Visual Studio 2022 project files.
                        Use -A option to specify architecture.
Visual Studio 16 2019 = Generates Visual Studio 2019 project files.
                        Use -A option to specify architecture.
Visual Studio 15 2017 [arch] = Generates Visual Studio 2017 project files.
                               Optional [arch] can be "Win64" or "ARM".
Visual Studio 14 2015 [arch] = Generates Visual Studio 2015 project files.
                               Optional [arch] can be "Win64" or "ARM".
Visual Studio 12 2013 [arch] = Generates Visual Studio 2013 project files.
                               Optional [arch] can be "Win64" or "ARM".
Visual Studio 11 2012 [arch] = Generates Visual Studio 2012 project files.
                               Optional [arch] can be "Win64" or "ARM".
Visual Studio 10 2010 [arch] = Deprecated. Generates Visual Studio 2010 project files.
                               Optional [arch] can be "Win64" or "IA64".
Visual Studio 9 2008 [arch] = Generates Visual Studio 2008 project files.
                              Optional [arch] can be "Win64" or "IA64".

 

저는 jsoncpp 라이브러리를 x86 및 x64 환경에서 사용할 예정이라 x86 및 x64 프로젝트를 생성했습니다.

 

jsoncpp 빌드 프로젝트 ( x86 및 x64 )

 

이제 Visual Studio 2019를 통해서 정적 라이브러리를 만들어 보겠습니다. 저는 플랫폼 및 구성에 맞게 총 4개의 정적 라이브러리를 만들어 사용할 예정입니다.

Static Library 명명 규칙 참고
플랫폼 구성 라이브러리 이름
x86 Debug libjsoncpp_MD_2019_x86D_1.9.5.lib
x86 Release libjsoncpp_MD_2019_x86_1.9.5.lib
x64 Debug libjsoncpp_MD_2019_x64D_1.9.5.lib
x64 Release libjsoncpp_MD_2019_x64_1.9.5.lib

 

정적 라이브러리 빌드

Visual Studio를 실행 후 jsoncpp 솔루션 파일을 오픈합니다.

( x86 플랫폼과 x64 플랫폼의 빌드 과정을 동일하기 때문에 이번 강의에서는 x86 플랫폼으로 진행하겠습니다. )

  • x86 플랫폼 빌드 솔루션 파일 위치 : Build\jsoncpp.sln
  • x64 플래폼 빌드 솔루션 파일 위치 : Build64\jsoncpp.sln

 

x86 플랫폼 빌드 솔루션 파일

저는 정적 라이브러리를 사용하고, 파일 명을 변경하기 위해서 솔루션 탐색기에 있는 jsoncpp_static 프로젝트의 속성을 변경하도록 하겠습니다. 

 

jsoncpp 빌드 솔루션 및 하위 프로젝트

 

프로젝트 속성 페이지에서 구성 속성 > 일반에서 대상 이름을 아래와 같이 변경 후 jsoncpp_static를 빌드 합니다.

( 대상 이름은 플랫폼 및 구성 별로 상이합니다. 위 표를 참고하세요. )

( 대상 이름을 꼭 변경하지 않아도 됩니다. )

 

jsoncpp_static 속성 페이지 수정
빌드 성공

빌드 성공 시 저장소\lib 폴더에 라이브러리 파일이 생성 됩니다. 

( 예시 : E:\OpenSource\jsoncpp\Build\lib\Debug )

 

샘플 프로젝트 

프로젝트 생성

C++ 콘솔 애플리케이션 프로젝트를 생성합니다.

콘솔 애플리케이션 프로젝트 생성

 

include 설정

샘플 프로젝트 솔루션 폴더에 include 폴더를 생성 후 jsoncpp 저장소에 있는 include 폴더를 복사합니다.

 

include 폴더 복사

 

프로젝트 속성 페이지의 구성 속성 > C/C++에서 추가 포함 디렉터리에 include 경로를 추가합니다. 

include 폴더 추가

 

정적 라이브러리 설정

샘플 프로젝트 솔루션 폴더에 lib 폴더를 생성 후 jsoncpp 정적 라이브러리를 복사합니다.

 

정적 라이브러리 복사

 

샘플 프로젝트 속성 페이지의 구성 속성 > 링커 > 일반에서 추가 라이브러리 디렉터리에 lib 경로를 추가합니다. 

lib 폴더 추가

구성 속성 > 링커 > 입력에서 추가 종속성에 구성 및 플랫폼에 맞는 정적 라이브러리를 추가합니다.

추가 종속성에 구성 및 플랫폼에 맞는 정적 라이브러리 추가

 

테스트

include 및 정적 라이브러리가 정상적으로 설정되었는지 테스트를 해보겠습니다. 

다음과 같이 코드 수정 후 빌드 시 정상적으로 빌드되면 include 및 정적 라이브러리가 정상적으로 설정 된 것입니다.

 

#include <iostream>

#include "json/json.h"

int main()
{
    Json::Value jv_root;
    std::cout << "Hello World!\n";
}

 

이제 jsoncpp 라이브러리를 사용할 준비가 모두 되었습니다. 다음 시간에는 jsoncpp 사용법에 대해서 강의하도록 하겠습니다.

 

빌드 시 오류 발생 정리

컴파일 오류

include 설정이 잘못되었습니다.

폴더를 정상적으로 복사하였는지, 프로젝트 속성 페이지에서 추가 포함 디렉토리 설정이 정상적으로 되어있는지 확인해주세요. 

 

링크 오류 ( LNK2019 )

정적 라이브러리 설정이 잘못되었습니다. 프로젝트 속성 페이지에서 추가 종속성에 jsoncpp 라이브러리를 추가하지 않았습니다. 

 

링크 오류 ( LNK1104 )

정적 라이브러리 설정이 잘못되었습니다. 프로젝트 속성 페이지에서 추가 포함 디렉토리 설정이 정상적으로 되어있는지 확인해주세요. 

'Programming > C++' 카테고리의 다른 글

Static Library 명명 규칙  (0) 2021.12.01