인프런 커뮤니티 질문&답변

BBAKK님의 프로필 이미지
BBAKK

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

채팅 실습

LNK2019와 LNK2001 에러

작성

·

2.1K

1

LNK2001과 LNK2019가 대량 발생합니다.

프로토 버퍼 라이브러리 문제인가 싶어서 다른 강의에 있는 라이브러리를 옮겨 보고,

프로토 버퍼 솔루션열어서 라이브러리를 다시 빌드해서 교체도 해보았으나 마찬가지입니다.

 

 

 

답변 3

1

저는 3.21버전에서 동일한 문제가 발생했는데요

include, protoc.exe, lib 파일을 모두 강의에 있는 것으로 변경해서 해결했습니다.

최신 버전이 꼭 필요한게 아니라면 강의에서 검증된 버전 사용하시는 것도 좋을 것 같아요

0

a51681767님 감사합니다.
여기서 막혀서 처음부터 복습하고 돌아왔는데,
위의 방법으로 해결했습니다

언제나 양질의 강좌로 진행해주셔서
Rookiss님께도 감사드립니다.
내년에 언리얼 + 서버연동도 기대하겠습니다
 _ _)

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

이 파일을 일단 삭제하고 다시 .sln을 열어본 다음,

설정이 x64로 되어 있는지 확인 후
서버 프로젝트 ServerCore를 [다시 빌드],
GameServer 또한 [다시 빌드] 해보세요.

BBAKK님의 프로필 이미지
BBAKK
질문자

x64로 선택하고 해보았습니다만 안되었습니다.

Rookiss님의 프로필 이미지
Rookiss
지식공유자

프로토 버퍼 라이브러리 문제인가 싶어서 다른 강의에 있는 라이브러리를 옮겨 보고,

<< 이 부분을 하셨다면 Include/google/protobuf 내용물도 반드시 해당 강의코드 버전을 이용해 덮어쓰셔야 합니다.

BBAKK님의 프로필 이미지
BBAKK
질문자

관련된 파일들 전부다 새로 복사했습니다.

프로토버퍼 빌드하는 솔루션에서 프로토버퍼용 컴파일러인 protoc까지도 새로 빌드해서,

다시 만들어보아도 마찬가지입니다.

pb.cc 파일에 precompiled Header  옵션을 Not Using Precompiled Headers로 변경하는 것도 잊지 않고 했습니다.

Rookiss님의 프로필 이미지
Rookiss
지식공유자

-.- 불가사의하군요. Protobuf가 빌드된 적이 한 번도 없었나요?

BBAKK님의 프로필 이미지
BBAKK
질문자

패킷 자동화2 까지는 큰 문제 없이 잘 되고 있었습니다.

빌드해서 쓴적도 몇번 있습니다.

루키스님 C# 강좌에서도 따라서 잘 했었구요.

 

Rookiss님의 프로필 이미지
Rookiss
지식공유자

네 c# 과 다르게 c++은 원래 이런 저런 빌드 에러가 많이 납니다.


여기서 가변길이인 string을 주석처리하고 빌드 해보시겠어요?

그나마 다행인건(?) 이전엔 됐었다니 범인을 줄여나가면 될듯 합니다.

Rookiss님의 프로필 이미지
Rookiss
지식공유자

그리고 강의 소스코드를 다운로드 받아서
ServerCore랑 GameServer를 그대로 재빌드해도 동일한 문제가 일어나는게 맞을까요?

그리고 내일 사무실 가면 다른 컴퓨터에서도 문제가 재현되는지 확인해보겠습니다.

BBAKK님의 프로필 이미지
BBAKK
질문자

~.proto 파일의 string 타입을 모두 주석 처리 후 빌드 성공하였습니다.

 

그런데 실행하니까 에러가 발생하여서 해당 파일을 Binary에 넣어주어 해결했습니다.

C++은 빌드 에러가 사람을 지치게 하네요.

 

Rookiss님의 프로필 이미지
Rookiss
지식공유자

네, C++에서 특히 외부 라이브러리를 사용하면 그런 일이 많습니다.
실제로 큰 프로젝트 가면 3~4일은 개발은 커녕 환경 설정 문제만 잡는게 일반적이구요.


도움말->VisualStudio 정보에 가서 현재 버전을 확인할 수 있는데 혹시 VS 버전이 얼마인가요?

Protobuf 빌드할 때 여러가지 옵션과 버전을 고를 수 있는데 관련 문제로 일단 보입니다.
다른 방법으로 Protobuf 설치해도 동일한지 조만간 테스트해보고 결과 알려드릴게요.
https://jungwoong.tistory.com/70

그럼 힘내세요

BBAKK님의 프로필 이미지
BBAKK
질문자

 

VS버전은 16.11.2 입니다

올려주신 링크의 vcpkg로 설치하는 방법은 이전에 사용해보았는데

이것도 여러가지로 불편한 점이 있더라고요.

BBAKK님의 프로필 이미지
BBAKK
질문자

프로토버퍼의 string타입이 안되는 문제는 언제 쯤 해결할 수 있을까요?

Rookiss님의 프로필 이미지
Rookiss
지식공유자

요즘 다른 일로 바쁜 와중에 다른 질문이 많이 올라와서 잘 보질 못했네요.
당장 서버 강의에서는 STRING을 사용하지 않아도 에코 서버만 구현하면 되는거라 일단 넘어가시기 바랍니다. (INT만 전송한다거나..)
해당 문제는 당장 제 환경에선 재현이 되지 않아 저도 언제까지 해결할 수 있을지 모르겠습니다.

안녕하세요 해당 강의를 잘 듣고 있는 수강생입니다. 저 또한 패킷 자동화#2 까지는 다 잘되다가 채팅실습강의부터 엄청난 링크 에러를 겪고 있었습니다.. 우선 영상 처음에 나오는 protobuf에서의 string 사용, lib 다시 빌드 설정을 알려주시는데 해당 설정을 할 때 부터 에러가 쏟아집니다. 다들 비슷한곳에서 막히는것 같아서 제가 구글링해서 얻은 정보를 공유하려고 합니다. 물론 지금 저의 프로젝트는 잘 빌드가 됩니다!

 

1. 첫번째 문제는 "Protobuf의 버전 문제" 입니다.

강의영상을 찍으신 시점과 강의를 듣는 분들의 시점에서 ProtoBuf의 라이브러리, 컴파일러 등의 버전차이가 존재합니다. 일단 강의를 찍으시는 시점에서는 3.17.x를 사용중이지만 지금 저의 기준으로 3.19.x가 최신버전입니다. 그래서 채팅실습강의 처음 구간에 나오는 "저도 블로그를 보고 낚였는데 cmake를 이용하여 체크를 모두 풀고 다시 빌드하세요~ 귀찮으면 저의 프로젝트의 파일을 덮어 쓰셔도 됩니다~" 라고 하시는 부분이 있는데 버전이 다르다면 절대로 파일을 덮는 방법은 사용할 수 없습니다. ( 해당 문제는 위에서도 설명해주셨고 빌드 에러도 MIN_VERSION 어쩌구 에러가 나오므로 쉽게 알 수 있습니다. )

 

2. 그렇다면 직접 빌드를 해야하는데 직접 빌드한 파일에서도 똑같은 에러가 발생합니다!

우선 https://github.com/protocolbuffers/protobuf/releases 에서 Protobuf 관련 파일을 다운받으라고 강의에서 알려주십니다. 이때 많은 목록들중에서 밑에 쪽에있는 protoc-3.19.4-win64.zip  을 다운 받으라고 하셨는데 저는 위쪽에 있는 protobuf-cpp-3.19.4.zip 을 다운 받아서 사용해보았습니다. 그리고 해당 알집을 풀고, cmake 를 이용하여 다시 빌드를 할 때 체크되어있는 것을 기본 상태로 두고 했습니다. 그리고 protoc.exe ( 프로토 컴파일러 )와 Debug 폴더에서의 lib, Release 폴더 에서의 lib (lib들은 1개씩 만 나오고 영상에서 알려주신것과 같은 이름 입니다 )를 이용하였습니다.

 

3. 아마 이때쯤부터 링크 에러가 바뀐거 같은데.. 여전히 많이 나왔습니다.

그런데 링크에러가 변경되어서 런타임 라이브러리가 일치 하지 않는다는 에러가 나왔습니다. 이 문제는  [ 프로젝트 속성 - C/C++ - 코드 생성 - 런타임 라이브러리 ] 속성이 프로젝트끼리 일치 하지 않는 이슈였습니다. 저는 ServerCore, GameServer, DummyClient 프로젝트 모두 /MTd 로 맞춰두고 빌드 하였고, Protocol.proto 에서 message 안에 string을 넣고 빌드가 성공하였습니다 ㅜㅜ

 

사실 혼자 새벽까지 구글링 하고 해결하니 굳이 댓글을 달아야하나 생각했는데 처음 강의에서 Rookiss님이 하신 말씀중에 "혼자서 없는 정보 찾아서 공부하고 그랬는데 막상 강의로 만들려니 억울하고.." 라고 말씀하시면서 여러 좋은 정보의 강의들을 저에게 알려주고 있었고 조금이라도 도움이 되고자 긴글을 남겨봤습니다.. 저의 설명이 부족할 수도 있지만 다들 해결하셨으면 좋겠습니다!! 아 그리고 아마 다들 패킷 자동화#2 까지는 무난히 하셨을거 같으니 팁을 남겨드리자면 Protobuf 강의 이전에 강의 프로젝트를 다운받고 해당 프로젝트로 다시 Protobuf, 패킷 자동화#1,#2를 해결하신후, 해당 솔루션을 백업해놓고 채팅 실습으로 와서 여러가지 테스트를 해보시면서 해결해 보면 좋을것 같습니다!.!

 

 

Rookiss님의 프로필 이미지
Rookiss
지식공유자

와 정말 감사합니다!!!

BBAKK님의 프로필 이미지
BBAKK

작성한 질문수

질문하기