본문 바로가기

Languages/C++

V8 학습

이전에 크롬브라우저 코드를 받아서 보다가 흐지부지 되었다.

embedded용 DSL(도메인 특화 언어) 선정을 위해 LUA, Python과 함께 선택을 되면서 다시 공부하게 되었다.

윈도우에서 Visual Studio 2008로 진행을 할 예정이다.


공식 사이트에서 다운로드와 빌드하는 법은 How to Download and Build V8 (https://developers.google.com/v8/build)를 참고한다. 윈도우 빌드는 https://code.google.com/p/v8/wiki/BuildingWithGYP 를 참고한다. (GYP는 mac이나 linux 같은 경우에는 make로 대체 가능하다)

한국 블로그 중에 참고할 만한 사이트는 http://funnylog.kr/354 가 있다. 일부 저장소 위치는 최신(2013.9.12)으로 변경했다.


아래 명령은 '명령 프롬프트'상에서 수행한다.

1. svn 설치(나의 경우는 http://tortoisesvn.net/ 에서 TortoiseSVN을 설치) svn.exe 명령이 가능해진다.

2. 소스 다운로드 (C:의 루트에서 수행했다고 가정)

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

3. v8 디렉토리로 이동

cd v8

3. cygwin 다운로드 (make 명령을 위함)

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

4. python 다운로드 (.sln 파일 생성을 위함)

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

5. make 명령 수행 (자동으로 gyp, icu 등을 설치)

third_party\cygwin\bin\make dependencies

6. 솔루션 파일(.sln) 생성

third_party\python_26\python.exe build\gyp_v8

 - 만약 64비트로 생성하고 싶다면 아래의 명령을 수행한다.

third_party\python_26\python.exe build\gyp_v8 -Dtarget_arch=x64



7. 솔루션 파일 실행 후 빌드

 인코딩 경고가 뜬다...

아래 프로젝트를 선택후


특정 경고 사용 안 함에: 4819;4355;4800;4351 를 추가해준다.(아래 그림은 인코딩 쪽만 추가했을 때 상황)



경고 유형

1>bash.exe: warning: could not create /tmp!

3>bash.exe: warning: could not create /tmp!

4>bash.exe: warning: could not create /tmp!

bash.exe (cygwin bin 경로가 PATH 상에 없어서 발생), 사용자 환경변수에 경로를 추가 해준다. (???)


에러 유형

v8\src\utils.h(958) : error C2220: 경고가 오류로 처리되어 생성된 'object' 파일이 없습니다.

1>        c:\v8\src\utils.h(958) : 클래스 템플릿 멤버 함수 'v8::internal::EmbeddedContainer<ElementType,NumElements>::EmbeddedContainer(void)'을(를) 컴파일하고 있습니다.

1>        with

1>        [

1>            ElementType=v8::internal::HValue *,

1>            NumElements=1

1>        ]

1>        c:\v8\src\hydrogen-instructions.h(1173) : 컴파일 중인 클래스 템플릿 인스턴스화 'v8::internal::EmbeddedContainer<ElementType,NumElements>'에 대한 참조를 확인하십시오.

1>        with

1>        [

1>            ElementType=v8::internal::HValue *,

1>            NumElements=1

1>        ]

1>        c:\v8\src\hydrogen-instructions.h(1245) : 컴파일 중인 클래스 템플릿 인스턴스화 'v8::internal::HTemplateInstruction<V>'에 대한 참조를 확인하십시오.

1>        with

1>        [

1>            V=1

1>        ]

http://v8reference.com/classv8_1_1internal_1_1HTemplateInstruction.html


참고로 위의 작업을 일괄 수행 해주는 스크립트가 있는 것 같다.

http://clearscript.codeplex.com/discussions/450766 참고


'Languages > C++' 카테고리의 다른 글

소켓 프로그래밍 튜토리얼 at binarytides.com  (0) 2014.06.18
C매크로의 오동작의 예  (0) 2013.10.22
LLVM 컴파일러?  (0) 2013.10.09
C++ web framework like spring for Java  (0) 2013.03.11
Xcode 4.6 - C++ 11 지원  (0) 2013.02.11