2008年03月11日
Tamarin Central の avmplus を VC++ 2005 でビルドする
最近、ビルドしてばっかりだけど、今度は avmplus をビルドしてみた。
基本、Tamarin Build Documentation - MDC に沿って。
Mercurial というバージョン管理ツールを使ってるらしいので、BinaryPackages - Mercurial から hg.exe を入手。
$ hg clone http://hg.mozilla.org/tamarin-central tamarin-central
ってやってしばらく待機。過去の履歴を全部落としてくるのが Mercurial の特徴なのかな。そこそこ時間がかかる。
zlib を手に入れといて、platform/win32/avmplus_8.sln を VC++2005 で開く。
ビルドしたら
error C2733: オーバーロードされた関数 '_interlockedbittestandset' の C リンケージの 2 回以上の宣言は許されません。 C:\Program Files\Microsoft Visual Studio 8\VC\include\intrin.h(944) : '_interlockedbittestandset' の宣言を確認してください。
というエラーが出たので検索してみたら、Windows SDK 6.0 の問題らしい(参考:Windows SDK for Windows Vistaとintrin.h - MSDN フォーラム)。
ってことで、avmplus.h の #include <intrin.h> をコメントアウトしたらうまくいった。Windows SDK 6.1 では解決してるのかも。
続いて、ErrorConstants.cpp で
warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。 error C2001: 定数が 2 行目に続いています。
が大量に出た。
各国語対応のメッセージを保持してるファイルらしい。そんなんどうでもいいので、
LangName languageNames[kLanguages] = { { "en", LANG_en }, { "de", LANG_de }, { "es", LANG_es }, { "fr", LANG_fr }, { "it", LANG_it }, { "ja", LANG_ja }, { "ko", LANG_ko }, { "zh-CN", LANG_zh_CN }, { "zh-TW", LANG_zh_TW }, };
をシンプルに
LangName languageNames[kLanguages] = { { "en", LANG_en }, };
と書き換えた。各国語のエラーメッセージを含む errorConstants も英語以外は削除しておいた。
こんだけいじったら、ビルドできましたよーっと。
(追記)