Glest 3.1.2 をビルドしてみた
Handbrake みたいにソースを見てどうこうしようという訳じゃないのだけど、なんとなくソースがあってビルドができるってなるとやってみたくなるのだ。
とりあえず、前回の Vorbis/Ogg に加えて SDL/Xerces-C++ の Framework が必要。
Xerces-C++ Framework をインストール
ココからソースをダウンロードできる。展開すると中に Projects/MacOS/Xcode/XercesLib/XercesLib.xcodeproj という感じで Xcode のプロジェクトファイルがあるので、これをダブルクリック! いつもの[プロジェクトルートとして使用するディレクトリを選択]はそのまま XercesLib フォルダを選ぶ。で、[すべてのターゲットをクリーニング]をしてからビルド。結構時間がかかるけど、エラー無くビルドは終了。でも、できあがった Xerces.framework にはヘッダファイルがない。というわけで、Xerces.framework/Versions/A/ に Headers フォルダを作ってそこに src フォルダの下にある xerces フォルダをコピー。その後で Xerces.framework フォルダにさっき作った Headers フォルダへのシンボリックリンクを張る。こんな感じ。
paraches-no-macbook-air:Xerces.framework paraches$ ln -s Versions/Current/Headers Headers paraches-no-macbook-air:Xerces.framework paraches$ ls -al total 40 drwxr-xr-x 7 paraches staff 238 7 5 23:37 . drwxr-xr-x@ 7 paraches staff 238 7 5 23:36 .. -rw-r--r--@ 1 paraches staff 6148 7 5 23:37 .DS_Store lrwxr-xr-x 1 paraches staff 24 7 5 23:37 Headers -> Versions/Current/Headers lrwxr-xr-x 1 paraches staff 26 7 5 23:36 Resources -> Versions/Current/Resources drwxr-xr-x 5 paraches staff 170 7 5 18:14 Versions lrwxr-xr-x 1 paraches staff 23 7 5 23:36 Xerces -> Versions/Current/Xerces
これで Xerces.framework のできあがり。(だと思うんだけど…)
一応、/Library/Frameworks フォルダに入れておいた。
Glest 3.1.2 をビルド
Glest 3.1.2 のソースはココから落とせる。これを展開すると Xcode フォルダに Glest.xcodeproj があるのでダブルクリックで Xcode 起動。さっそくビルドというわけにはいかなくて、Xcode フォルダにある PrvFrameworks フォルダに Vorbis/Ogg/SDL/Xerces の4つの framework を入れなければいけない。([グループとファイル]の Frameworks/Linked Frameworks にある4つの framework が赤くなってる!)というわけで、4つの framework を /Library/Frameworks フォルダから PrvFrameworks フォルダへコピー。これでビルドの準備完了。ビルドボタンを押して凄く長い時間待つだけ…
が、ここで 17個のエラー!
"xercesc_2_8::XMLUni::fgXercescDefaultLocale", referenced from: __ZN11xercesc_2_86XMLUni22fgXercescDefaultLocaleE$non_lazy_ptr in libglestlib.a(xml_parser.o) "xercesc_2_8::DOMException::~DOMException()", referenced from: Shared::Xml::XmlIo::XmlIo()in libglestlib.a(xml_parser.o) "xercesc_2_8::XMLString::transcode(unsigned short const*)", referenced from: Shared::Xml::XmlIo::save(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, Shared::Xml::XmlNode const*)in libglestlib.a(xml_parser.o) Shared::Xml::XmlIo::load(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)in libglestlib.a(xml_parser.o) "xercesc_2_8::DOMException::DOMException(xercesc_2_8::DOMException const&)", referenced from: Shared::Xml::XmlIo::XmlIo()in libglestlib.a(xml_parser.o) "xercesc_2_8::LocalFileFormatTarget::LocalFileFormatTarget(char const*, xercesc_2_8::MemoryManager*)", referenced from: Shared::Xml::XmlIo::save(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, Shared::Xml::XmlNode const*)in libglestlib.a(xml_parser.o) "xercesc_2_8::XMLString::transcode(unsigned short const*, char*, unsigned int, xercesc_2_8::MemoryManager*)", referenced from: Shared::Xml::XmlAttribute::XmlAttribute(xercesc_2_8::DOMNode*)in libglestlib.a(xml_parser.o) Shared::Xml::XmlAttribute::XmlAttribute(xercesc_2_8::DOMNode*)in libglestlib.a(xml_parser.o) Shared::Xml::XmlNode::XmlNode(xercesc_2_8::DOMNode*)in libglestlib.a(xml_parser.o) Shared::Xml::ErrorHandler::handleError(xercesc_2_8::DOMError const&) in libglestlib.a(xml_parser.o) Shared::Xml::ErrorHandler::handleError(xercesc_2_8::DOMError const&) in libglestlib.a(xml_parser.o) "xercesc_2_8::XMLUni::fgDOMValidation", referenced from: __ZN11xercesc_2_86XMLUni15fgDOMValidationE$non_lazy_ptr in libglestlib.a(xml_parser.o) "xercesc_2_8::XMLPlatformUtils::Terminate()", referenced from: Shared::Xml::XmlIo::~XmlIo()in libglestlib.a(xml_parser.o) "xercesc_2_8::DOMImplementationRegistry::getDOMImplementation(unsigned short const*)", referenced from: Shared::Xml::XmlIo::XmlIo()in libglestlib.a(xml_parser.o) "xercesc_2_8::XMLPlatformUtils::Initialize(char const*, char const*, xercesc_2_8::PanicHandler*, xercesc_2_8::MemoryManager*, bool)", referenced from: Shared::Xml::XmlIo::XmlIo()in libglestlib.a(xml_parser.o) "xercesc_2_8::XMLUni::fgXercesSchemaFullChecking", referenced from: __ZN11xercesc_2_86XMLUni26fgXercesSchemaFullCheckingE$non_lazy_ptr in libglestlib.a(xml_parser.o) "typeinfo for xercesc_2_8::XMLException", referenced from: GCC_except_table22 in libglestlib.a(xml_parser.o) "xercesc_2_8::XMLUni::fgDOMWRTFormatPrettyPrint", referenced from: __ZN11xercesc_2_86XMLUni25fgDOMWRTFormatPrettyPrintE$non_lazy_ptr in libglestlib.a(xml_parser.o) "xercesc_2_8::XMLPlatformUtils::fgMemoryManager", referenced from: __ZN11xercesc_2_816XMLPlatformUtils15fgMemoryManagerE$non_lazy_ptr in libglestlib.a(xml_parser.o) "xercesc_2_8::XMLString::transcode(char const*, unsigned short*, unsigned int, xercesc_2_8::MemoryManager*)", referenced from: Shared::Xml::XmlNode::buildElement(xercesc_2_8::DOMDocument*) const in libglestlib.a(xml_parser.o) Shared::Xml::XmlNode::buildElement(xercesc_2_8::DOMDocument*) const in libglestlib.a(xml_parser.o) Shared::Xml::XmlNode::buildElement(xercesc_2_8::DOMDocument*) const in libglestlib.a(xml_parser.o) Shared::Xml::XmlIo::save(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, Shared::Xml::XmlNode const*)in libglestlib.a(xml_parser.o) Shared::Xml::XmlIo::XmlIo()in libglestlib.a(xml_parser.o) "xercesc_2_8::LocalFileFormatTarget::~LocalFileFormatTarget()", referenced from: Shared::Xml::XmlIo::save(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, Shared::Xml::XmlNode const*)in libglestlib.a(xml_parser.o) Shared::Xml::XmlIo::save(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, Shared::Xml::XmlNode const*)in libglestlib.a(xml_parser.o) "typeinfo for xercesc_2_8::DOMException", referenced from: GCC_except_table19 in libglestlib.a(xml_parser.o) GCC_except_table20 in libglestlib.a(xml_parser.o) GCC_except_table22 in libglestlib.a(xml_parser.o) ld: symbol(s) not found collect2: ld returned 1 exit status Build failed (17 個のエラー, 166 個の警告)
何? 何言ってるの???
シンボルが見つからないからリンクできないよ!ってエラーなんだと思うけど、それってどうすりゃ良いのよ???
Xerces.framework をダウンロード
というわけで、あれこれ調べてみたりしたんだけども、これについてはお手上げ状態…。なんだけど、MacOS X 用にビルドされている Xerces.framework をココで発見!早速ダウンロードしてきた。
まずは展開してみると…を!ちゃんとヘッダファイルもついてるよ! さっそく Xerces.framework を Glest の PrvFrameworks フォルダへコピー。[すべてのターゲットをクリーニング]してからビルド!凄く長い時間の後でビルドは無事終了!!!
できあがった Glest ファイルをダブルクリックして…ちゃんと起動も確認。
というわけで、落としてきた Xerces.framework を使ったら問題なくビルドできた。と、言うことは…自分でビルドした Xerces.framework が駄目だったということだな。う〜ん、何がいけなかったんだろう?ビルドはエラー無しでできたのに…。自分でヘッダファイルをコピーしてリンク張ったりしたのがいけない???