본문 바로가기
프로그래밍/게임 개발

비주얼 스튜디오에서 구글 프로토콜 버퍼(protobuf) 라이브러리 빌드하기

by 제페 2018. 10. 1.


프로토콜버퍼(protobuf) 버전2 비주얼 스튜디오 빌드를 위한 별도의 프로젝트인 vsproject 있었지만,

프로토콜버퍼 버전3에선 별도의 vsproject 존재하지 않았다.

여튼 proto3 사용하기 위해 빌드하는 방법을 정리.

 

프로토콜 버퍼를 다운 받자

 프로토콜버퍼 소스를 공식 홈페이지에서 다운 받는다.

https://developers.google.com/protocol-buffers/docs/downloads


링크로 진입하면 깃허브 저장소 링크가 있는데, releases 탭에서 최근 릴리즈를 받을 거다.

요기서 protobuf-cpp-3.6.1.zip 받는다.

 

압축을 풀고 cmake 폴더가 있는 확인하고 고개를 끄덕인다. cmake 폴더가 있다는 기억하자!!

 

CMake 설치하자

CMake 공식 홈페이지에 가서 CMake 다운 받자.


64비트 윈도우니까 cmake-3.12.2-win64-x64.msi 다운 받았다. 다운을 받았다면 그대로 설치.

모두 기본 설정을 이용했다.


성공적으로 설치 됐다면 위와 같은 프로그램이 설치된다.


CMake 프로젝트를 만들자


CMake 실행한다.

Where is the source code 프로토콜버퍼 디렉토리에 있던 cmake 폴더를 지정한다.

Where to build the binaries 비주얼 스튜디오 솔루션이 생성될 폴더를 지정한다.(이건 임의로 지정하면 된다.)


Configure 버튼을 누르면 다음과 같은 창이 보이는데 Visual Studio 2017 사용하고 64비트 프로젝트에 사용할 것이므로 Visual Studio 2017 Win64 지정했다.


 

Finish 누르면 잠시 다음과 같은 구성 값이 보인다.

 


여기까지 됐다면 Generate 누른다.

 

Generating done이란 메세지가 떴다면 성공적으로 프로젝트가 생성된 거다.

 

그럼 Where to build the binaries 지정한 위치에 비주얼 스튜디오 솔루션이 생성된 확인할 있다.


 프로토콜 버퍼 라이브러리를 빌드하자

솔루션에 들어가면 다음과 같이 되어있는 확인할 있다. ALL_BUILD 빌드한다.

libprotobufd.lib(libprotobuf.lib debug 버전) 생성된 것을 확인할 있다. 이걸 프로젝트에 사용하면 된다.

디버그 모드에서 쓴다면 디버그 모드로 빌드된 libprotobuf.lib,

릴리즈 모드에서 사용 릴리즈 모드로 빌드된 libprotobuf.lib 쓰자.


프로토콜버퍼 메시지를 넣고 빌드가 되는 확인하자빌드가 성공하면 성공!

++

LINK2038 RuntimeLibrary 불일치 같은 오류로 빌드에 실패했다면

속성 페이지 - C/C++ - 코드 생성에서 런타임 라이브러리를 살펴보자.

부분이 프로토콜버퍼의 lib 파일이 빌드된 것과 프로젝트의 런타임 라이브러리가 달라서 해당 오류가 발생한 것이다. 부분을 맞춰주면 된다.

같은 경우는 런타임 라이브러리를 /MDd에서 /MTd 맞춰줬다. 

MD MT 차이는 다음 블로그에서 설명을 해놨더라.

https://m.blog.naver.com/PostView.nhn?blogId=milennium9&logNo=20153887924&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F


댓글4

  • heejune 2018.10.01 19:13

    VS2017에서 cmake 지원을 하고 있어서, CMakeLists.txt 파일이 위치한 폴더를 그대로 VS에서 폴더 열기 하시면 단계를 좀더 줄일 수 있을 것 같습니다. ^^ 좋은 자료 감사합니다..
    답글

    • BlogIcon 제페 2018.10.01 22:06 신고

      generator나 빌드 경로를 직접 지정해줘야 하는 건 아쉽지만 단계가 많이 줄어서 정말 편하긴 하네요~ 따로 찾아볼 생각도 못 하고 있었는데, 감사합니다!

  • won 2019.08.13 17:29

    혹시 사용한 Monster 메세지 안의 내용좀 알 수 있을까요
    답글