CEGUI 빌드부터 FirstWindow Sample 실행 실패기( VS 2003 )

 서비스 중인 MMORPG 프로젝트의 UI를 전면 수정해야할지도 모른다고 했었죠. 그래서 네이티브 C++ 베이스 GUI 미들웨어도 리서치 했었구요. 그중에서 CEGUI를 일단 R&D 해보기로 했습니다. 사실 전 회사에서 잠시 써봤었는데 그땐 정리 안했다가 이제와서 정리해보네요.

 결론부터 말하면 VS 2003에서는 실행시 뻑이납니다. VS 2010에서는 실행이 잘되는거 보면 2003은 문제가 있나보네요. 게임 프로젝트가 2003기반이고 엔진도 2003이라 이거 뭐...


1. CEGUI 설치

 CEGUI 다운로드 페이지에 가셔서 최신 버전을 다운로드 합니다. 현재 0.7.9가 최신이네요.

 그리고 그 밑에 있는 CEGUI 작업에 필요한 의존성 모듈을 다운받아야 합니다. VS 2003으로 작업중인데 2003이 없어서 2005로 다운로드 했습니다.

 적당한 곳에 압축 해제하고 각 비주얼 스튜디오 환경에 맞는 bat파일을 실행해줍니다. 저는 build_vs2003.bat와 build_samples_vs2003.bat를 실행해줬습니다. 그러면 CEGUI SDK용 CEGUI.sln과 샘플이 들어있는 CEGUISamples.sln 파일이 생성됩니다.


2. CEGUI 및 Sample 빌드

 이제 CEGUI.sln 파일을 열어 빌드를 해보면 여러 에러가 발생할 수 있습니다. 링크에 따로 정리했으니 참고하세요.


Cegui-0.7.9\cegui\include\RendererModules\Direct3D9\CEGUIDirect3D9Renderer.h(36): fatal error C1083: 포함 파일을 열 수 없습니다. 'd3d9.h': No such file or directory
CEGUI-0.7.9\Samples\common\src\CEGuiD3D9BaseApplication.cpp(36): fatal error C1083: 포함 파일을 열 수 없습니다. 'd3d9.h': No such file or directory
Sample_FirstWindow fatal error LNK1104: '../../../../lib/CEGUISampleHelper_d.lib' 파일을 열 수 없습니다.
CEGUISampleHelper fatal error LNK1104: 'd3d9.lib' 파일을 열 수 없습니다.
Sample_FirstWindow fatal error LNK1104: '../../../../lib/CEGUISampleHelper_d.lib' 파일을 열 수 없습니다.

 다음으로 CEGUISamples.sln도 빌드하면 역시나 위와같이 에러가 나는데 CEGUI를 빌드할 때 정리했던 이슈와 같은 맥락입니다. CEGUISampleHelper 프로젝트 속성의 추가 포함 디렉터리에 각자 환경에 맞는 dxsdk include를 추가해줍니다.


3. 샘플 실행 그리고 에러


 이제 빌드한 Sample_FirstWindow를 디버그 해보면 위와같이 '컴퓨터에 freeglut_d.dll이(가) 없어 프로그램을 시작할 수 없습니다. 프로그램을 다시 설치하여 이 문제를 해결하십시오.' 런타임 에러가 발생합니다.

 CEGUI는 의존성 모듈이 많이 있습니다. 다운받아 압축 해제했던 의존성 관련 dll파일들을 빌드한 파일이 있는 곳에 복사해줍니다.

  다음에는 'DefaultResourceProvider::load: .../datafiles/imagesets/logo.png does not exist' 에러가 발생합니다.

 디버그하고 있는 샘플 프로젝트 속성의 디버깅 -> 작업 디렉터리에 $(Outdir)을 추가해줍니다.

 드디어 실행이 되네요. 렌더러를 세팅해주고 Go!를 클릭하면,

> CEGUIBase_d.dll!CEGUI::RenderingSurface::~RenderingSurface()  줄 65 C++
  CEGUIBase_d.dll!CEGUI::Window::setParent(CEGUI::Window * parent=0x07013b30)  줄 1283 C++
  CEGUIBase_d.dll!CEGUI::Window::addChild_impl(CEGUI::Window * wnd=0x07016fb0)  줄 1340 C++
  CEGUIBase_d.dll!CEGUI::Window::addChildWindow(CEGUI::Window * window=0x07016fb0)  줄 912 + 0x14 C++
  Sample_FirstWindow_d.exe!FirstWindowSample::initialiseSample()  줄 98 + 0xf C++
  CEGUISampleHelper_d.dll!CEGuiD3D9BaseApplication::execute(CEGuiSample * sampleApp=0x0018ff14)  줄 181 + 0xd C++
  CEGUISampleHelper_d.dll!CEGuiSample::initialise()  줄 241 + 0x19 C++
  CEGUISampleHelper_d.dll!CEGuiSample::run()  줄 121 + 0xd C++
  Sample_FirstWindow_d.exe!main(int __formal=1, int __formal=1)  줄 39 + 0xb C++
  Sample_FirstWindow_d.exe!mainCRTStartup()  줄 398 + 0x11 C

 에러가 발생하네요.



> CEGUIBase_d.dll!CEGUI::Window::getTargetChildAtPosition(const CEGUI::Vector2 & position={...}, const bool allow_disabled=true)  줄 736 + 0x22 C++
  CEGUIBase_d.dll!CEGUI::Window::getTargetChildAtPosition(const CEGUI::Vector2 & position={...}, const bool allow_disabled=true)  줄 748 + 0x17 C++
  CEGUIBase_d.dll!CEGUI::System::getTargetWindow(const CEGUI::Vector2 & pt={...}, const bool allow_disabled=true)  줄 1022 + 0x13 C++
  CEGUIBase_d.dll!CEGUI::System::updateWindowContainingMouse()  줄 1705 + 0xe C++
  CEGUIBase_d.dll!CEGUI::System::mouseMoveInjection_impl(CEGUI::MouseEventArgs & ma={...})  줄 1642 C++
  CEGUIBase_d.dll!CEGUI::System::injectMousePosition(float x_pos=205.00000, float y_pos=266.00000)  줄 985 + 0xc C++
  CEGUISampleHelper_d.dll!Win32AppHelper::wndProc(HWND__ * hWnd=0x00230608, unsigned int message=512, unsigned int wParam=0, long lParam=17432781)  줄 132 + 0x4e C++

 이런 다른에러도 발생하구요. 하지만 위에 결론부터 말했듯이 VS 2010에서는 실행이 잘됩니다. 아무래도 게임브리오 엔진이 2003용 lib뿐이 없기때문에 CEGUI는 패스해야겠네요. 다음에는 MyGUI를 R&D 해보는 걸 정리해보겠습니다.

이 블로그의 인기 게시물

Unity3D Prime31 처럼 자신만의 안드로이드 플러그인을 만들어보자

CMake Windows에 설치하기

Unity3D iOS Plugin 만들어 연동하기