QT5.0.2 를 static 빌드를 해야 되는 과정에서 ICU 라이브러리로 필요하게되는데  해당 ICU사이트에서 배포하고 있는 바이너리 버전인 경우에는 MSVC2010 으로 되어있기도 하고,  또한 sicule.lib  같이 static build가 아닌 DLL 사용 빌드 형태이다.  


  그래서 static 빌드를 해야 하는데 그러기 위해서 필요한 순서를 정리해두려고 한다.


먼저 필요한것 부터 정리


0. MSVC 2012 

    MS Visual Studio 2012  또는 2010 이 설치되어있어 한다.


   설치 디렉토리  

           C:\DEVTOOL\MSVC2012P


1. Cygwin  환경 준비 

    http://www.cygwin.com/  에서 최신 Cygwin 다운로드 후 설치 

  

   설치에서는 Develope 관련 도구들 선택 설치할것


여기에서는 

C:\DEVTOOL\Cygwin 에서 setup.exe 파일을 넣어두고,  Cygwin 루트 디렉토리도 C:\DEVTOOL\Cygwin로 지정






2. ICU 소스 다운로드 


http://site.icu-project.org/download   에서 다운로드 할 수 있으며, 현재 기준 최신 Release 가 ICU 51 버전이어서


http://download.icu-project.org/files/icu4c/51.1/icu4c-51_1-src.zip   를 다운로드 하면 된다.


여기서는 다운로드한 파일들을  


C:\DEVTOOL\libsources\icu4c-51_1-src   경로 압축풀었다.




3. MSVC2012 를 이용한 static 빌드를 위한 몇가지  runConfigureICU 파일 수정하기


static  빌드가 문제가 없도록 하기 위해서는 runConfigureICU  파일을 수정해야한다.

수정한 파일은 runConfigureICU_static 파일명으로 변경


106,107 라인 comment out 처리 (MSVC 빌드에서는 불필요)


Cygwin/MSVC   플랫폼 설정부분에서 

/MD 로 되어 있는 부분을 /MT로 바꾼다.

또한 링커용 설정에는  

    RELEASE_LDFLAGS='/NODEFAULTLIB:MSVCRT'

를 추가하고 


    DEBUG_LDFLAGS='/DEBUG /NODEFAULTLIB:MSVCRTD'  

로 변경한다. 



4. 빌드하기 


4.1 MSVC를 이용한 빌드를 하기위해서는 관련한 환경설정을 준비해야한다. 


Command line prompt 를 실행시킨뒤  C:\DEVTOOL\MSVC2012P\VC\vcvarsall.bat  를 실행한다


또는 아래 그림을 참고해서 시작프로그램에서 [VS2012용 개발자 명령프롬프트]를 실행해도된다.


Cygwin에 bin 디렉토리 path 를 추가한다. (bash를 사용해야 해서)


> SET PATH=%PATH%;C:\DEVTOOL\Cygwin\bin



그리고  ICU 소스 디렉토리로 이동 후 runConfigureICU_static 실행한다.  


> cd C:\DEVTOOL\libsources\icu4c-51_1-src\source


static release 빌드인 경우 

> bash runConfigureICU_static Cygwin/MSVC  --prefix=/cygdrive/c/DEVTOOL/libs/icu-release-static-win32-msvc2012 --with-data-packaging=static --enable-static --disable-shared --enable-release --disable-debug 



static debug 빌드인 경우 

> bash runConfigureICU_static Cygwin/MSVC  --prefix=/cygdrive/c/DEVTOOL/libs/icu-debug-static-win32-msvc2012  --with-data-packaging=static --enable-static --disable-shared --enable-debug --disable-release


참고로 dynamic 빌드(DLL생성) 일 때에는


shared debug


 bash runConfigureICU  Cygwin/MSVC  --prefix=/cygdrive/c/DEVTOOL/libs/icu-debug-shared-win32-msvc2012 --with-data-packaging=static --enable-shared --disable-static --enable-debug --disable-release


shared release


> bash runConfigureICU  Cygwin/MSVC  --prefix=/cygdrive/c/DEVTOOL/libs/icu-release-shared-win32-msvc2012 --with-data-packaging=static --enable-shared  --disable-static --disable-debug --enable-release




그리고 나서  아래 메시지 처럼 설정 완료 표시가 나오면 .


ICU for C/C++ 51.1 is ready to be built.

=== Important Notes: ===

Data Packaging: static

 This means: ICU data will be stored in a static library.

 To locate data: ICU will use the linked data library. If linked with the stub l

ibrary located in stubdata/, the application can use udata_setCommonData() or se

t a data path to override.

Building ICU: Use a GNU make such as make to build ICU.

checking the version of "make"... 3.82.90 (we wanted at least 3.80)

ok


'make' 실행하여 빌드 진행한다.  빌드 후 에는 'make check' 실행하여 정상빌드 여부 확인한다.


> make

> make check


테스트 완료 결과 



잘 끝났으면 설치한다.

> make install









v8 빌드 방식이 바뀌어서 이전에 Scons 을 쓰는 것은 deprecated 되었다.

 

GYP 빌드 메타 정보를 생성하는 방법을 사용하는데 윈도우 & MSVC 2010 환경에서 빌드 하는 방법을 정리한다.

 

 

아래 순서로 빌드하면됨

 

1. 소스 다운로드

svn checkout http://v8.googlecode.com/svn/trunk/ v8

2. gyp 다운로드 (v8 빌드를 위한 메타 정보라고 함)

svn co http://gyp.googlecode.com/svn/trunk build/gyp

3. chromium python 다운로드 후 설치

svn co http://src.chromium.org/svn/trunk/tools/third_party/python_26@89111 third_party/python_26

4. chromium 제공  cygwin 설치

svn co  http://src.chromium.org/svn/trunk/deps/third_party/cygwin@66844 third_party/cygwin

5. visual studio 용 sln 파일 만들기

third_party\python_26\python.exe build\gyp_v8 -G msvs_version=2010

Updating projects from gyp files...

만들어진 all.sln 파일을 열고 msvc 에서 빌드 하는데... 아마도  code page 에러 (C4819 warning)가 발생할 것이다.

warning 중간에 나오는 error들도  warning 다량발생을 인한 2차적인 에러이므로 c4819만 잡으면 된다.

===================== 발생 에러 =======================

v8\src\utils.h : error C2220: warning treated as error - no 'object' file generated

v8\src\utils.h : warning C4819: The file contains a character that cannot be represented in the current code page (949). Save the file in Unicode format to prevent data loss

===============================================================

조치 하는 방법은  해당 솔루션에 포함된 프로젝트들(아래그림 참고) 중  소스를 포함하는 프로젝트들을 선택하여 C4819 Warning 이 안 뜨도록 억제해주면 된다.

파란색으로 선택된 프로젝트들만 선택하고 12개 프로젝트 선택하고 속성 창을 띄운다.

선택한뒤  Properties (속성) 창을 띄운다.

그리고 Disable Specific Warnings 에 4819를 추가해줍니다. (아래그림참고)

그리고 나서 빌드 하면 잘됨..

+ Recent posts