성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
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> 이전에 Chromium을 Visual C++로 하는 방법을 설명했었는데요.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Chromium 컴파일하는 방법 ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/1078'>http://www.sysnet.pe.kr/2/0/1078</a> </pre> <br /> 최근에 Windows 8의 스토어 앱 모드를 크롬이 지원하면서 빌드 방법도 제법 바뀌었습니다. 우선, 바뀐 빌드 방법은 아래의 공식 문서에 반영되어 있습니다.<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 - Build Instructions (Windows) ; <a target='tab' href='http://www.chromium.org/developers/how-tos/build-instructions-windows'>http://www.chromium.org/developers/how-tos/build-instructions-windows</a> </pre> <br /> 이 글은 위의 문서를 정리한 것에 불과합니다. ^^<br /> <br /> <hr style='width: 50%' /><br /> <br /> 기본적인 개발 환경은 다음의 순서로 진행됩니다.<br /> <br /> <ol> <li>OS Windows 7 Ultimate - 64비트 + SP1 설치</li> <li>Visual Studio 2010 Ultimate + SP1 설치</li> <li>Windows 8 SDK 설치: <a target='tab' href='https://developer.microsoft.com/en-us/windows/downloads/sdk-archive/'>https://developer.microsoft.com/en-us/windows/downloads/sdk-archive/</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> <li>환경 변수 정의: GYP_DEFINES=windows_sdk_path="C:\Program Files (x86)\Windows Kits\8.0"</li> </ol> <br /> 공식 문서에는 Windows 8 SDK 헤더 파일 중에서 Visual Studio 2010에 포함된 Visual C++ 컴파일러로는 에러가 나는 구문을 수정하라고 나옵니다. "C:\Program Files (x86)\Windows Kits\8.0\Include\winrt\asyncinfo.h" 파일의 66라인에 보면 AsyncStatus 정의가 있는데,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > enum class AsyncStatus { Started = 0, Completed, Canceled, Error, }; </pre> <br /> 여기서 enum class의 class 단어를 주석 처리하거나 삭제하고 저장하면 됩니다.<br /> <br /> 그다음 Chromium 빌드에 관련된 파일을 다운로드 합니다.<br /> <br /> <ul> <li>크롬 소스 코드 압축 파일 다운로드: 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></li> <li>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></li> </ul> <br /> 크롬 소스 코드를 담은 tarball 파일은 D:\chrome_build 폴더에 압축을 해제합니다. 그다음 depot_tools도 다운로드 후 D:\chrome_build\depot_tools 폴더에 압축 해제합니다. depot_tools에 포함된 gclient.bat 파일을 접근할 수 있도록 시스템 환경 변수의 PATH에 D:\chrome_build\depot_tools 경로를 추가합니다.<br /> <br /> 최종적으로 폴더 구조는 다음과 같은 구성으로 완료됩니다.<br /> <br /> <img alt='chrome_build_vs_1.png' src='/SysWebRes/bbs/chrome_build_vs_1.png' /><br /> <br /> Visual Studio 명령 프롬프트를 실행하고 Chromium의 소스 폴더로 이동한 다음 최신 소스 코드로 반영하는 작업을 gclient로 실행합니다. 간단하게 다음과 같은 명령어를 차례대로 입력해 주면 됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > cd D:\chrome_build\home\src_tarball\tarball\chromium\src d: gclient sync --force </pre> <br /> 제 경우에는 gclient sync 작업 실행 중 다음과 같은 식으로 오류가 발생했습니다.<br /> <br /> <div style='BACKGROUND-COLOR: #ccffcc; padding: 10px 10px 5px 10px; MARGIN: 0px 10px 10px 10px; FONT-FAMILY: Malgun Gothic, Consolas, Verdana; COLOR: #005555'> Installing git (avg 1-2 min download) ...<br /> Installing subversion ...<br /> Installing python ...<br /> Your depot_tools checkout is configured to fetch from an obsolete URL<br /> Would you like to update it? [y/N]: Y<br /> <br /> ...[생략]...<br /> <br /> Syncing projects: 12% (14/111) src/breakpad/src<br /> 12>________ running 'svn update D:\chrome_build\home\src_tarball\tarball\chromium\src\content\test\data\layout_tests\LayoutTests\fast\events --revision 143130 -<br /> -non-interactive --force --accept theirs-conflict --ignore-externals' in 'D:\chrome_build\home\src_tarball\tarball\chromium'<br /> 12>A D:\chrome_build\home\src_tarball\tarball\chromium\src\content\test\data\layout_tests\LayoutTests\fast\events\onerror-no-constructor.html<br /> 12>A D:\chrome_build\home\src_tarball\tarball\chromium\src\content\test\data\layout_tests\LayoutTests\fast\events\onerror-no-constructor-expected.txt<br /> 12>Updated to revision 143130.<br /> Syncing projects: 13% (15/111) src/content/test/data/layout_tests/LayoutTests/f<br /> <br /> <span style='color: blue; font-weight: bold'>Error: Can't update/checkout D:\chrome_build\home\src_tarball\tarball\chromium\src\content\test\data\layout_tests\LayoutTests\fast\filesystem if an unversioned directory is present. Delete the directory and try again.</span> </div><br /> <br /> 실제로 오류 메시지에 따라 "D:\chrome_build\home\src_tarball\tarball\chromium\src\content\test\data\layout_tests\LayoutTests\fast\filesystem" 폴더를 삭제하고 다시 "gclient sync --force"를 실행해 주면 이번에는 정상적으로 업데이트가 마무리 됩니다.<br /> <br /> 소스 코드 업데이트가 완료되었으면 이제 빌드를 마지막으로 해줍니다. 역시 Visual Studio 명령행 창에서 아래와 같은 명령어를 차례대로 수행해 주면 됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > cd D:\chrome_build\home\src_tarball\tarball\chromium\src\chrome d: devenv /build Release chrome.sln /project chrome.vcxproj </pre> <br /> 일단, 문서에 따르면 위의 절차대로만 해주면 정상적으로 빌드가 된다고 나옵니다. 설령, 빌드 문제가 발생해도... 어떻게 해서든 해결하면 됩니다. ^^ (참고로, d:\chrome_build\home\src_tarball\tarball\chromium\src\chrome\chrome.sln 파일을 Visual Studio에서 직접 로드해 빌드하는 것도 가능합니다.)<br /> <br /> 빌드가 완료되면 다음의 경로에 chrome.exe를 포함한 실행 모듈들이 생성됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Debug 빌드 - D:\chrome_build\home\src_tarball\tarball\chromium\src\build\Debug Release 빌드 - D:\chrome_build\home\src_tarball\tarball\chromium\src\build\Release </pre> <br /> <hr style='width: 50%' /><br /> <br /> 그런데, 제 경우에는 문서에 없는 오류가 발생했습니다. glue 프로젝트를 빌드 중에 다음과 같은 오류가 발생했는데요.<br /> <br /> <div style='BACKGROUND-COLOR: #ccffcc; padding: 10px 10px 5px 10px; MARGIN: 0px 10px 10px 10px; FONT-FAMILY: Malgun Gothic, Consolas, Verdana; COLOR: #005555'> 1>------ 빌드 시작: 프로젝트: glue, 구성: Release Win32 ------<br /> 1> webkit_glue.cc<br /> 1>C:\Program Files (x86)\Windows Kits\8.0\Include\um\combaseapi.h(242): error C2061: syntax error : identifier 'pp'<br /> 1>C:\Program Files (x86)\Windows Kits\8.0\Include\um\combaseapi.h(242): error C3646: '_Post_satisfies_' : unknown override specifier<br /> </div><br /> <br /> 메모장으로 "C:\Program Files (x86)\Windows Kits\8.0\Include\um\combaseapi.h" 파일의 242라인을 보면 다음과 같은 코드가 나옵니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > extern "C++" { template<typename T> _Post_equal_to_(pp) _Post_satisfies_(return == pp) void** IID_PPV_ARGS_Helper(T** pp) { #pragma prefast(suppress: 6269, "Tool issue with unused static_cast") static_cast<IUnknown*>(*pp); // make sure everyone derives from IUnknown return reinterpret_cast<void**>(pp); } } </pre> <br /> 역시 Visual Studio 2010에 포함된 C++ 컴파일러가 빌드를 못하는 경우 같은데요. 여기서 _Post_equal_to_, _Post_satisfies_에 대한 주석 처리를 다음과 같이 해주면 됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > extern "C++" { template<typename T> <span style='color: blue; font-weight: bold'>/* _Post_equal_to_(pp) _Post_satisfies_(return == pp) */</span> void** IID_PPV_ARGS_Helper(T** pp) { #pragma prefast(suppress: 6269, "Tool issue with unused static_cast") static_cast<IUnknown*>(*pp); // make sure everyone derives from IUnknown return reinterpret_cast<void**>(pp); } } </pre> <br /> 저장하고 빌드하면 이제 저 위치에서는 오류가 발생하지 않습니다.<br /> <br /> <hr style='width: 50%' /><br /> <br /> 그 외에 문제가 하나 더 있었는데요. 사실, 이번에 크롬 빌드를 하면서 예전과 다르지 않겠거니 하고 <a target='tab' href='http://www.sysnet.pe.kr/2/0/1078'>이전 문서</a>에 따라 Windows SDK 7.0A를 설치했습니다. 7.0A의 경우 빌드 초기부터 8.0 winrt 관련 헤더들이 없는 까닭에 컴파일 오류가 발생합니다. 그래서 다시 8.0 WinSDK를 설치하게 되었는데요.<br /> <br /> 이 상태에서 glue 프로젝트를 빌드하면 다음과 같은 오류가 발생합니다.<br /> <br /> <div style='BACKGROUND-COLOR: #ccffcc; padding: 10px 10px 5px 10px; MARGIN: 0px 10px 10px 10px; FONT-FAMILY: Malgun Gothic, Consolas, Verdana; COLOR: #005555'> 1>------ 빌드 시작: 프로젝트: glue, 구성: Release Win32 ------<br /> 1> webkit_glue.cc<br /> 1>C:\Program Files (x86)\Windows Kits\8.0\Include\shared\wtypesbase.h(260): error C2011: '_COAUTHIDENTITY' : 'struct' type redefinition<br /> 1> C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\wtypes.h(501) : see declaration of '_COAUTHIDENTITY'<br /> 1>C:\Program Files (x86)\Windows Kits\8.0\Include\shared\wtypesbase.h(271): error C2011: '_COAUTHINFO' : 'struct' type redefinition<br /> 1> C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\wtypes.h(512) : see declaration of '_COAUTHINFO'<br /> 1>C:\Program Files (x86)\Windows Kits\8.0\Include\shared\wtypesbase.h(315): error C2011: 'tagMEMCTX' : 'enum' type redefinition<br /> 1> C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\wtypes.h(558) : see declaration of 'tagMEMCTX'<br /> 1>C:\Program Files (x86)\Windows Kits\8.0\Include\shared\wtypesbase.h(348): error C2011: 'tagCLSCTX' : 'enum' type redefinition<br /> </div><br /> <br /> 이 오류는 glue 프로젝트에 8.0과 7.0A의 Windows SDK가 모두 적용되었기 때문입니다. 이를 해결하려면 해당 Visual C++ 프로젝트 속성창을 열고 다음과 같이 "C:\Program Files (x86)\Windows Kits\8.0\Include" 폴더를 수작업으로 등록하고 반드시 "부모 또는 프로젝트 기본값에서 상속" 설정을 해제해 주어야 합니다. (하는 김에 Debug와 Release 모두에 적용하는 것이 좋겠지요. ^^)<br /> <br /> <img onclick='toggle_img(this)' class='imgView' alt='chrome_build_vs_2.png' src='/SysWebRes/bbs/chrome_build_vs_2.png' /><br /> <br /> 변경 후 다시 빌드를 해주면 정상적으로 오류 없이 컴파일이 완료됩니다.<br /> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
9572
(왼쪽의 숫자를 입력해야 합니다.)