맥에서 XPIDL 제대로 사용하기

(OS X 10.5.5 Leopard 를 기준으로 작성한 글입니다)

XPIDL은 Firefox 확장기능을 만들 때, 컴포넌트를 만들기 위해 .idl 파일을 .xpt 형식의 파일로 변환할 때 사용하는 실행파일입다.

Firefox 확장 기능은 주로 맥 OS X (Intel)를 사용해서 개발하고 있는데, 예전에 XPIDL을 잘 다루지 못해 컴포넌트 제작에서 좌절했었던 경험이 있습니다. 검색해보면 다른 운영체제보다 맥에서 다소 문제가 있는 모양인데, 최신 버전의 Gecko SDK 를 사용해서인지 그래도 큰 어려움은 없었습니다.

그렇다고 삽질 과정이 아예 없다는 뜻은 아니어서, 몇 가지 설명을 더해볼까 합니다(저번에 기록을 안했더니 이번에 또 삽질을… T^T).


우선 Gecko SDK를 다운로드받아 압축을 해제합니다. 어디에 해제해두어도 상관은 없지만, 이왕이면 쉽게 접근할 수 있는 곳이 좋습니다. 제 경우에는 /opt/ 에 압축을 해제해서, 최종적으로 경로는 /opt/xulrunner-sdk/ 가 되었습니다. SDK 하위 경로 중 bin 폴더에 이번에 다루려는 xpidl 이 있습니다. 파일은 이미 실행가능한 바이너리이기 때문에 바로 실행할 수 있습니다.

…원래는 그랬어야 합니다만, 맥의 경우에는 문제가 좀 있습니다. Mozilla Developer Center의 Gecko SDK 페이지에도 나와있지만, xpidl을 그냥 실행하면 다음과 같은 오류 메시지를 만나게 됩니다.

dyld: Library not loaded: /opt/local/lib/libIDL-2.0.dylib
   Referenced from: /Users/gony/Downloads/xulrunner-sdk/bin/xpidl
   Reason: image not found
Trace/BPT trap

그리고 SDK 빌드 프로세스 때문이라는데, 현재로서는 해결이 안된다고 그러네요(이건 뭐…). 이 문제를 해결하려면, 다른 외부 라이브러리를 설치해야 하는데 이 때 MacPorts를 사용합니다(Fink도 있지만 권장하지 않습니다). 또한, 1.6.x버전은 문제가 있으니 1.7.x버전으로 다운로드 받아야 합니다.

아.. 그 전에 우선 XCode를 설치해야 하는데, 최신 버전으로 설치해두시기를 바랍니다. 아마 맥을 구입할 때 같이 받은 DVD에 있을 것입니다. 아니면 애플가서 내려받은 후에 설치하셔야 합니다.

그 다음에 port 명령어를 사용해서 libidl을 설치합니다. MacPorts의 기본 설치경로는 /opt/local 이고, portbin 폴더에 있으므로 다음과 같이 명령을 실행할 수 있습니다(처음 실행하는 것이라면 설치할 것이 많아 꽤 기다리셔야 합니다).

$ sudo /opt/local/bin/port sync
$ sudo /opt/local/bin/port install libidl

모든 설치가 끝나고 다시 한번 xpidl 을 실행하면 이번에는 이런 메시지를 만날 수 있습니다.

dyld: Library not loaded: /opt/local/lib/libintl.3.dylib
   Referenced from: /Users/gony/Downloads/xulrunner-sdk/bin/xpidl
   Reason: image not found
Trace/BPT trap

그러면 다음과 같이 심볼릭 링크를 만들어 줍니다.

sudo ln -s /opt/local/lib/libintl.8.dylib /opt/local/lib/libintl.3.dylib

다시 xpidl을 실행하면 아까와는 다른 반가운 메시지가 나타난 것을 확인할 수 있습니다. :)

Leave a Reply