퇴사 후 새로운 도전: 유니티에서 언리얼로의 전환
오랜만에 다시 공부를 시작했습니다. 이번에는 유니티 개발자에서 언리얼 클라이언트 개발자로 전직하기 위해, 스파르타 코딩클럽에서 진행하는 국비 지원 과정에 참여하게 되었습니다. 오늘부터 꾸준히 TIL(Today I Learned)을 작성하려 합니다. 첫날의 여정을 기록해 보겠습니다.
Day 1: 시작
1. 사전 캠프 준비 완료
- 팀장이 되어 팀 노션 페이지를 생성하였습니다.
앞으로의 작업 기록과 협업을 위한 준비를 끝냈습니다.
2. 스파르타 코딩클럽 강의 수강
현재 C++ 언어로 게임 만들기 강의를 수강 중입니다.
- MacOS에서 VS Code 개발 환경 구성
- 언리얼 엔진 공식 문서를 참고하여 진행하였습니다.
- VS Code 설치 확인은 Visual Studio Code 공식 문서를 참고했습니다.
강의의 1-3 단계를 완료한 후, 빌드를 진행하던 중 에러가 발생했습니다.
3. 첫 번째 에러: 'main' must return 'int'
error: 'main' must return 'int'
원인
main() 함수는 반드시 int 형으로 반환되어야 합니다.
강의는 윈도우 환경에서 진행되어 void main()으로 작성되었지만, 맥에서는 표준을 따르지 않아 에러가 발생한 것입니다.
해결 방법
- void main()을 int main()으로 변경.
- 마지막 줄에 return 0; 추가.
이렇게 수정한 후 문제를 해결했습니다.
4. 두 번째 에러: 링크 에러 (Undefined Symbols)
clang: error: linker command failed with exit code 1
원인
맥과 윈도우의 C++ 컴파일러 동작 방식 차이에서 비롯된 문제입니다.
- 윈도우 (MSVC)
- 파일 간 의존성을 자동으로 관리하고 빌드 시스템이 이를 해결해 줍니다.
- 맥 (Clang)
- 명시적으로 모든 파일을 지정하지 않으면 함수나 클래스 구현을 찾을 수 없어 링크 에러가 발생합니다.
- 특히 맥의 링커(ld)는 정의되지 않은 심볼(함수, 클래스 등)이 있을 경우 빌드를 막습니다.
해결 방법
- 모든 소스 파일을 명시적으로 포함.
-
g++ -o Main Main.cpp Character.cpp Enemy.cpp Actor.cpp
- 추가 경고(C++11 extension) 해결을 위해 컴파일러 플래그 -std=c++11 추가.
-
g++ -std=c++11 -o Main Main.cpp Character.cpp Enemy.cpp Actor.cpp
g++ -o Main Main.cpp Character.cpp Enemy.cpp Actor.cpp
g++ -std=c++11 -o Main Main.cpp Character.cpp Enemy.cpp Actor.cpp
이 과정을 통해 빌드를 성공적으로 완료했습니다!
깨달은 점
- 운영 체제의 차이를 고려해야 한다
윈도우에서는 MSVC가 의존성을 자동으로 관리하기 때문에 편리하지만, 맥에서는 명시적으로 모든 파일을 지정해야 한다는 점을 배웠습니다. - 맥 개발 환경에서 C++
VS Code와 Clang 조합으로도 충분히 작업이 가능하지만, 환경 설정과 빌드 과정에서 신경 쓸 부분이 많습니다.
마무리
내일배움캠프 첫날, 맥 환경에서의 어려움을 해결하며 의미 있는 하루를 보냈습니다. 작은 성공이지만, 앞으로의 도전도 잘 해낼 수 있을 거란 자신감을 얻었습니다. 내일은 더 발전된 내용을 기록하겠습니다. 감사합니다. 😊