성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] Roll A Lisp In C - Reading ; https...
[정성태] Java - How to use the Foreign Funct...
[정성태] 제가 큰 실수를 했군요. ^^; Delegate를 통한 Bein...
[정성태] Working with Rust Libraries from C#...
[정성태] Detecting blocking calls using asyn...
[정성태] 아쉽게도, 커뮤니티는 아니고 개인 블로그입니다. ^^
[정성태] 질문이 잘 이해가 안 됩니다. 우선, 해당 소스코드에서 ILis...
[양승조
] var대신 dinamic으로 선언해서 해결은 했습니다. 맞는 해...
[양승조
] 또 막혔습니다. ㅠㅠ var list = props[i].Ge...
[양승조
] 아. 감사합니다. 어제는 안됐던것 같은데....정신을 차려야겠네...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>Chromium 컴파일하는 방법</h1> <p> <br /> 요즘 제가 VC++로 오픈소스 빌드하는 거에 재미들렸나 봅니다. ^^<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > PHP 소스를 윈도우 환경에서 빌드하기 ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/1042'>http://www.sysnet.pe.kr/2/0/1042</a> Apache 소스를 윈도우 환경에서 빌드하기 ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/1048'>http://www.sysnet.pe.kr/2/0/1048</a> 윈도우에서 Apache Module 컴파일 (VC++) ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/1051'>http://www.sysnet.pe.kr/2/0/1051</a> 윈도우에서 Apache Module - Content Handler 컴파일 (VC++) ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/1056'>http://www.sysnet.pe.kr/2/0/1056</a> 소스 코드로부터 php5apache2_2.dll 생성하는 방법 ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/1057'>http://www.sysnet.pe.kr/2/0/1057</a> PHP 모듈 - php_mysql 빌드하는 방법 ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/1059'>http://www.sysnet.pe.kr/2/0/1059</a> </pre> <br /> 이번 목표는 Chromium 브라우저로 잡았는데, 빌드를 위해 웹상에서 도움을 받은 자료는 다음과 같습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > How to compile Google Chrome with Visual C++ 2008 Express Edition ; <a target='tab' href='http://cotsog.wordpress.com/2009/11/08/how-to-compile-google-chrome-with-visual-c-2008-express-edition/'>http://cotsog.wordpress.com/2009/11/08/how-to-compile-google-chrome-with-visual-c-2008-express-edition/</a> The Chromium Projects - Build Instructions (Windows) ; <a target='tab' href='http://dev.chromium.org/developers/how-tos/build-instructions-windows'>http://dev.chromium.org/developers/how-tos/build-instructions-windows</a> </pre> <br /> <hr style='width: 50%' /><br /> <br /> 우선, 빌드 환경을 구성하는 것부터 해야겠지요.<br /> <br /> <ul> <li>Windows 7 Ultimate x64</li> <li>Visual Studio 2010 Ultimate SP1 (x64 Compilers and Tools 포함)</li> <li>시스템 환경 변수에 "set GYP_MSVS_VERSION=2010" 추가</li> <li>Windows 7.1 SDK 설치 (<a target='tab' href='http://www.microsoft.com/download/en/details.aspx?id=8279'>http://www.microsoft.com/download/en/details.aspx?id=8279</a>)</li> <li>DirectX SDK 설치 - DXSDK_Jun10.exe (<a target='tab' href='http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=6812'>http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=6812</a>)</li> </ul> <br /> 사실, DirectX SDK를 제외하면 거의 요즘 .NET 개발자들의 표준 설치 환경이라고 볼 수 있습니다. 참고로, 제 경우에는 위의 환경을 물리 머신이 아닌 Hyper-V 내의 Virtual Machine으로 구성했습니다.<br /> <br /> <ul> <li>메모리: 5120MB</li> <li>Processor: 4</li> <li>HDD - C: 30GB</li> <li>HDD - D: 60GB</li> </ul> <br /> 그다음 단계로, 빌드를 위한 폴더(예: d:\chrome_build)를 만들고 tarball을 다운로드해 chrome_build 폴더에서 압축을 해제합니다. (이거 다운로드하는데 오래 걸리므로, 위의 빌드 머신 환경을 만들 때 다른 컴퓨터에 다운로드를 미리 시작해 두는 것이 좋습니다.)<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > source tarball ; <a target='tab' href='http://chromium-browser-source.commondatastorage.googleapis.com/chromium_tarball.html'>http://chromium-browser-source.commondatastorage.googleapis.com/chromium_tarball.html</a> </pre> <br /> 2011년 7월 1일 기준으로, "chromium.r90962.tar" 파일이 다운로드 되었고 d:\chrome_build에 압축 해제를 했습니다. 이어서, "depot_tools"를 다운로드해,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > The Chromium Projects - Install the depot_tools ; <a target='tab' href='http://dev.chromium.org/developers/how-tos/install-depot-tools'>http://dev.chromium.org/developers/how-tos/install-depot-tools</a> </pre> <br /> 역시 d:\chrome_build에 압축을 풀어 놓습니다. 그래서 "D:\chrome_build\depot_tools" 폴더가 생성되었고, 시스템 환경 변수의 PATH 경로에 등록해 주었습니다. 여기까지 구성된 폴더 구조를 보면 다음과 같습니다.<br /> <br /> <img alt='how_to_compile_chrome_1.png' src='/SysWebRes/bbs/how_to_compile_chrome_1.png' /><br /> <br /> 이제, 명령행 윈도우를 실행하고 "D:\chrome_build\home\chrome-svn\tarball\chromium\src" 폴더로 이동한 후 gclient를 다음과 같이 실행시켜 줍니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > D:\chrome_build><span style='color: blue; font-weight: bold'>cd D:\chrome_build\home\chrome-svn\tarball\chromium\src</span> D:\chrome_build\home\chrome-svn\tarball\chromium\src><span style='color: blue; font-weight: bold'>gclient sync --force </span> Installing subversion ... Installing python ... ...[이후 한참 동안의 소스 코드 동기화]... ...[중간에 아래와 같이 오류로 인한 재시도를 하는 등]... ________ running 'svn update D:\chrome_build\home\chrome-svn\tarball\chromium\src\tools\page_cycler\acid3 --revision 195 46 --force --ignore-externals' in 'D:\chrome_build\home\chrome-svn\tarball\chromium' svn: Server sent unexpected return value (400 Bad Request) in response to REPORT request for '/svn/!svn/vcc/default' Sleeping 5.0 seconds and retrying.... ...[생략 - 중간에 다음과 같이 경고가 나오는데, 이유는 알 수 없음]... Updating projects from gyp files... Warning: Missing input file src\chrome_frame\third_party\active_doc\in_place_menu.h Warning: Missing input file src\chrome_frame\third_party\active_doc\ole_document_impl.h ...[생략]... Warning: Missing input file src\third_party\WebKit\Source\WebCore\WebCore.gyp\..\platform\graphics\win\cairo\FontPlatfor mData.h ...[생략]... Warning: Missing input file src\third_party\WebKit\Source\JavaScriptCore\JavaScriptCore.gyp\..\wtf\url\src\URLCharacterTypes.h Warning: Missing input file src\third_party\WebKit\Source\JavaScriptCore\JavaScriptCore.gyp\..\wtf\url\src\RawURLBuffer.h ...[이하 생략]... </pre> <br /> 위와 같은 단계를 거치고 나면 d:\chrome_build\home 폴더의 크기만 5.17GB 정도 되는데, 이 과정에서 소스 코드만 다운로드 하는 것은 아니고 빌드된 것들도 함께 다운로드가 됩니다. 일례로, 다음의 폴더에 가면 직접적으로 실행가능한 chrome.exe 파일 및 기타 바이너리 파일들이 있는 것을 발견할 수 있습니다. (여기 있는 chrome.exe는 소스 코드를 빌드해서 생성한 chrome.exe와는 버전이 다릅니다.)<br /> <br /> <ul> <li>"D:\chrome_build\home\chrome-svn\tarball\chromium\src\chrome\tools\test\reference_build\chrome_win"</li> <li>"D:\chrome_build\home\chrome-svn\tarball\chromium\src\chrome_frame\tools\test\reference_build\chrome_win"</li> </ul> <br /> 일부 버전에서는 다음의 경로에서 발견되기도 합니다.<br /> <br /> <ul> <li>"D:\chrome_build\home\chrome-svn\tarball\chromium\src\src\chrome\tools\test\reference_build\chrome"</li> <li>"D:\chrome_build\home\chrome-svn\tarball\chromium\src\src\chrome_frame\tools\test\reference_build\chrome" </li> </ul> <br /> 어쨌든, 이것으로 준비는 모두 끝났습니다. 마지막으로 Visual Studio 2010 명령행 윈도우를 실행하고 다음과 같이 빌드 명령을 내려주면,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Setting environment for using Microsoft Visual Studio 2010 x86 tools. D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC><span style='color: blue; font-weight: bold'>cd D:\chrome_build\home\chrome-svn\tarball\chromium\src\chrome</span> D:\chrome_build\home\chrome-svn\tarball\chromium\src\chrome><span style='color: blue; font-weight: bold'>devenv /build Release chrome.sln /project chrome.vcxproj</span> </pre> <br /> 우와~~~ 다음과 같이 14.0.812.0 버전의 Chromium을 얻을 수 있었습니다. ^^<br /> <br /> <img alt='how_to_compile_chrome_2.png' src='/SysWebRes/bbs/how_to_compile_chrome_2.png' /><br /> <br /> 참고로, 위에서는 명령행에서 빌드를 했는데 Visual Studio 2010 IDE에 올려서 빌드하는 것도 가능합니다. 하지만, 430개가 넘는 프로젝트를 올린 IDE에서 빌드를 하는 것이 꽤나 인내심을 필요로 하므로 그다지 권장되지 않습니다. (게다가, 실제로 명령행에서 Release 모드로 빌드해보면 290여 개의 프로젝트만 빌드됩니다.)<br /> <br /> 암튼, 놀랍군요. 수백 개의 Visual C++ 프로젝트가 (표면상으로) 치명적인 버그 하나 없이 조화를 이뤄 돌아간다는 것이 쉽지 않을 텐데 말이죠. ^^<br /> <br /> <hr style='width: 50%' /><br /> <br /> <br /><div style='font-size: 12pt; font-family: Malgun Gothic, Consolas; color: #2211AA; text-align: left; font-weight: bold'>뒷 이야기 1 - 최신 소스 코드는 안정화되지 않았습니다.</div> <br /> 일단, 빌드는 위와 같이 해결은 했지만 아쉽게도 "gclient sync"로 받은 소스 코드 버전은 안정화되지는 않은 것 같습니다. 오늘 기준으로 빌드된 14.0.812.0 (Developer Build 91480) 버전의 chrome.exe로 <a target='tab' href='http://ie.microsoft.com/testdrive/'>IE 10 Test Drive 사이트</a>에 방문해서, 아래의 Web Worker 테스트를 해보니 (무조건, Debug/Release 빌드에 상관없이) 비정상적인 종료 현상이 있었습니다<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Web Worker Harness for test262 ; <a target='tab' href='http://ie.microsoft.com/testdrive/HTML5/WebWorkerTest262/Default.html'>http://ie.microsoft.com/testdrive/HTML5/WebWorkerTest262/Default.html</a> </pre> <br /> <br /><div style='font-size: 12pt; font-family: Malgun Gothic, Consolas; color: #2211AA; text-align: left; font-weight: bold'>뒷 이야기 2 - 4CPU에서는 약 5GB 정도 이상의 메모리가 권장됩니다.</div> <br /> 빌드 시 필요한 메모리를 이야기해 보면, 문서에도 밝히고 있지만 (HT 포함한) 논리 코어 수에 따라 동시 빌드 수가 결정되기 때문에 VM의 경우 할당된 가상 CPU 수에 따라 차이가 납니다. Hyper-V의 경우 최대 4개까지 가상 CPU를 지정할 수 있으므로 이를 기준으로 제가 모니터링한 결과 빌드하는 동안 최대 4.6GB까지의 메모리가 소모되었습니다.<br /> <br /> 만약, 메모리가 그에 미치지 않는 환경이라면 - 예를 들어 16 논리 쓰레드에 4GB 메모리라면 옵션 조정을 통해 동시 컴파일 수를 조정하는 것이 좋습니다.<br /> <br /> <br /><div style='font-size: 12pt; font-family: Malgun Gothic, Consolas; color: #2211AA; text-align: left; font-weight: bold'>뒷 이야기 3 - 빌드 오류</div> <br /> Visual Studio IDE 내에서 빌드를 하는 중에 나타난 재미있는 컴파일 오류가 있었다면 딱 한 번 아래와 같은 경우가 있었습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 28>------ Build started: Project: pyautolib, Configuration: Debug Win32 ------ 29>------ Build started: Project: plugin_tests, Configuration: Debug Win32 ------ 28> pyautolib_wrap.cc 28>d:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\math.h(162): <span style='color: blue; font-weight: bold'>error C2220: warning treated as error - no 'object' file generated</span> 28>d:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\math.h(162): warning C4211: nonstandard extension used : redefined extern to static 30>------ Build started: Project: performance_ui_tests, Configuration: Debug Win32 ------ </pre> <br /> 왜 재미있었냐면,,, 어떤 경우에는 위와 같은 오류 없이 빌드가 잘 되었다가, 어떤 경우에는 오류가 발생했다는 점 때문입니다. 어쨌든, 프로젝트 속성 창에서 "Configuration Properties" / "C/C++" / "Treat Warnings As Errors" 옵션을 "No (/WX-)"로 조정을 해주었습니다. <br /> <br /> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
1294
(왼쪽의 숫자를 입력해야 합니다.)