GRE (Gecko Runtime Environment)는 Mozilla 기술을 내장하기 위한 framework입니다. 이 내장된 framework은 application이 호환되는 Gecko runtime에서 수행될 수 있도록 하고, 실행 이전에 미리 Gecko runtime이 어디에 설치되어야 하는지를 알 필요가 없도록 해줍니다. 이 문서에는 Gecko runtime을 내장하기 위해 GRE를 어떻게 동적으로 연결해야 하는지에 대해 소개합니다. 어떻게 GRE들을 등록하는지를 이해하기 위해서는 GRE Registration을 참조하시기 바랍니다.
XRE (XUL Runtime Environment) 프로젝트는 XULRunner로 대체되어 왔습니다.
Mozilla Suite: the old GRE
GRE에는 두 가지 다른 형식이 있습니다: "오래된" GRE는 Mozilla application의 한 부분이었고, Mozilla 1.4 부터 1.7.x 버젼에 포함되어 Windows 설치시에 포함되어 설치 되었습니다. 그러나, Linux를 위해 공식적으로 제공된 GRE는 없습니다. 그렇지만, Linux의 경우에는 Red Hat 같은 다양한 Linux 배포자 들이 마치 GRE인 것처럼 포장하여 Mozilla installation을 등록해 왔습니다. Mozilla 패키지에는 Mac에서 수행되는 GRE를 제공한 적은 없습니다.
XULRunner: the new GRE
XULRunner는 자체로 GRE를 내장시키는 기능 뿐만 아니라 Firefox 같은 전체 XUL application을 시동시키는 기능도 포함하고 있습니다. XULRunner는 모든 3개의 주요 platform (Windows, Mac과 Linux)에 포함될 수 있도록 지원했거나 지원할 계획입니다.
Application code로부터 GRE를 찾고 사용하는 방법
xpcom.dll을 직접 link하여 사용하는 것으로 피하세요.
만약 application이 GRE를 사용하기 원한다면, 올바른 library들을 연결하는 작업을 주의깊게 해야 합니다. 만약 application에서 xpcom.dll/libxpcom.so
(xpcom.lib
import lib)을 직접 link로 연결했을 경우, 이 경우 application의 실행 PATH에 xpcom.dll이 없다면 application은 실행되지 않을 것입니다. 이런 경우에는 실행 시점에 application과 호환되는 GRE를 동적으로 찾는 작업을 어렵게 만들 수 있습니다.
호환되는 GRE를 찾는 방법
Support for locating a standalone glue was removed in Gecko 6.0 (Firefox 6.0 / Thunderbird 6.0 / SeaMonkey 2.3).
호환되는 GRE를 찾기 위해서는, GRE_GetGREPathWithProperties()
( xpcom/glue/standalone/nsXPCOMGlue.h
안에 선언된)함수를 반드시 사용해야 합니다. 이 방법은 embedder가 GRE의 어떤 version이 가장 적절한지를 명시할 수 있도록 해주고, GRE가 반드시 가져야만 하는 특별한 특징들 또한 명시할 수 있도록 해 줍니다. (현재 GRE에서 명시된 특별한 특징들은 없습니다.)
xpcomglue.lib에 정적인 link 걸기 ("독립적인 glue")
해결책은 xpcomglue.lib에 정적으로 link를 거는 방법이고, 이 방법은 "독립적인 glue" (
XPCOM Glue 참조)로 알려져 있습니다. 이 library는 내장되는 code와 XPCOM 사이에 간접적인 계층을 제공합니다. XPCOM glue를 사용하기 위해서는 이어지는 단계들을 면밀히 따라야 합니다.
- 정의된
XPCOM_GLUE로 당신의 code를 compile하세요
. xpcomglue.lib
(xpcomglue_s.lib
!이 아닙니다)로 link를 거세요. NSPR libs에 대한 link를 걸지 마세요.- 위에 있는 것처럼 호환되는 GRE를 찾으세요.
XPCOMGlueStartup()
함수를 사용하는 GRE에 동적으로 link를 거세요. 아래 명시되어 있는 환경변수들을 참조하세요.- XPCOM을 초기화하고, 당신의 모듈을 작성하세요. 끝마쳤을때, XPCOM을 닫으세요.
XPCOMGlueShutdown()함수로
XPCOM에 대한 link를 해제하세요.
독립적인 라이브러리들과 환경 변수들
XULRunner GRE는 embedder가 XPCOMGlueStartup()함수를 호출하기 전에 PATH
나 LD_LIBRARY_PATH 같은 환경 변수들을 설정할 필요가 없도록 설계되었습니다. 왜냐하면 XULRunner GRE는 독립적인 library들을 동적으로 적재할 수 있기 때문입니다.
운나쁘게도, 특별히 Linux에서는 특별한 작업을 더 해야 합니다. Embedder들은 LD_LIBRARY_PATH 환경 변수를 설정할 필요가 있고, 올바르게 GRE를 내장하기 위해서는 새로운 프로세스를 시작해야 합니다.