広告バナー

チャット仮想空間ソフト「MikuMikuOnline」サーバのビルド&インストールに挑む !( on Vine Linux 6.2 with gcc 4.5.4)

 以前からMikuMikuDanceデータを使ってチャット仮想空間ソフト「MikuMikuOnline」には興味があった。オープンソースで仮想空間を実現できるソフトに「OpenSim」があるが、やはり、多彩なMikuMikuDanceデータを使える「MikuMikuOnline」の方が魅力的に思えた。

 「MikuMikuOnline」は、Windows上で動作するサーバ・クライアントソフトであるが、サーバは、Linux等でビルドできるという書き込みを以前に見て、今回、Vine Linux 6.2をインストールした後に、「MikuMikuOnline」も、インストールしてみることにした。

 以下は、OS以外でソースコードをダウンロードしてビルドしたソフトの一覧である。ちなみに、m4,openssl,openssl-staticは、Vine LinuxのパッケージでもOKでした。後述しますが、Vine Linuxのパッケージgcc、boost関連は古くて歯が立ちませんでした(汗)。cryptopp 5.6.2は、特に問題なく、ビルドできている。

cryptopp562.zip
boost_1_58_0.tar.gz
gcc-4.5.4.tar.gz(本来は、gcc 4.6以上を推奨)
libelf-0.8.13.tar.gz
mpfr-3.0.1.tar.gz(+ patch)
gmp-5.0.2.tar.gz
mpc-0.9.tar.gz

 最初は、Vine Linux 6.2のパッケージでビルドを開始したのですが、参考ウェブページ[1]と同じエラーで止まってしまいました。該当箇所のソースコードを閲覧すると、どうやら、ラムダ式でプログラミングされている部分でエラーが出ている。

 Vine Linux 6.2のgcc(Ver. 4.4.5)は古くて、ラムダ式に対応していないため、gcc-4.5以上にバージョンアップする必要が出てきた。gcc 4.5のC++0xサポート状況は参考ウェブページ[2]で確認した。

 gcc 4.5のビルドは参考ウェブページ[3]を参考に作業を進めた。gmp, mpfr, mpcのビルドについては、参考ウェブページ[3]の通りに上手くいった。そして、configureを実行することになるが、ここからが、参考ウェブページ[3]とは異なる。ppl関連でエラーが出たため、--without-pplを付けている。

 libelf関連のエラーが出ていた。Vine Linux 6.2のヘッダ構成の中にelf.hは存在するのだが、gccのconfigureが想定する位置と違うらしい。仕方なく、libelf-0.8.13.tar.gzをsourceforgeからダウンロードしてビルドした。

 結果、以下のように、configureを実行した。

../gcc-4.5.4/configure --enable-languages=c,c++,fortran --with-mpc=/usr/local --with-gmp=/usr/local --with-mpfr=/usr/local --with-elf=/usr/local --without-ppl
 これでlibelf関連のエラーが消えた。また、以下のエラーが残ったが、こちらは無視しても、問題ないらしい。

conftest.c:10:28: error: ac_nonexistent.h: No such file or directory
conftest.c:10:28: error: ac_nonexistent.h: No such file or directory

 これで、gcc 4.5.4をビルドする準備が整ったので、make bootstrap、そして、make install。

export LD_LIBRARY_PATH=/usr/local/lib; make bootstrap

make install

 やっと、ここからMikuMikuOnlineのサーバのビルド作業に入ります。実は、ここで、ミスっていました。MikuMikuOnlineサーバのソースコードの改行コードを変換して作業していたのですが、間違って、文字コードをUTF-8BOMにしていたらしく、コンパイル時にマクロ展開エラーが出まくりでした(苦笑)。気付いて、UTF-8Nに直したら、マクロ展開エラーは消えました。以下のコマンドで、MikuMikuOnlineサーバのビルドを行います。

export LD_LIBRARY_PATH=/usr/local/lib; make
 
 しかし、boost関連でエラーが発生。boostのバージョンが古いらしいためと判り、予め用意していたboost 1.55.0をビルドする。boostのビルドは、かなり時間がかかったため、挑戦する人は注意しましょう。

export LD_LIBRARY_PATH=/usr/local/lib; ./bootstrap.sh

 何度か、トライ&エラーを繰り返したが、MikuMikuOnlineサーバのビルドで、std::addressof関連のエラーが消えない…。Googleに活躍してもらって、参考ウェブページ[4]に「Fixed detection of C++11 std::addressof with g++ (#10982)」の一文を発見。

 確かに、boost/asio/detail/config.hppの__GXX_EXPERIMENTAL_CXX0X__関連箇所をさっと眺めてみると、gcc4.5.xでも、std::addressofが使えるように見える。もしかすると、別の箇所で変なマクロが不具合を起こしているのかもしれない。

 また、かなり後の調査でわかったことだが、MikuMikuOnlineサーバは、gcc 4.6でビルドの実績があるらしい(参考ウェブページ[5])。とりあえず、gcc 4.5.4で進められるところまでやってみることにした。

 もしかすると、gcc4.6.x & boost <1.58.0の何れかの組み合わせでも、「Fixed detection of C++11 std::addressof with g++ (#10982)」に起因するエラーが出ていた可能性があるね。

 boost 1.58.0をダウンロードして、以前と同じ要領で、再びビルドする。

 b2コマンドに-aオプション(Causes all files to be rebuilt)を付けて強制インストール。このオプションを付けないとヘッダファイルが更新されない。

./b2 -a toolset=gcc cxxflags=-fPIC library-path=/usr/local/lib -j1 --prefix=/usr/local --without-mpi

 再び、MikuMikuOnlineのサーバのビルド作業に戻る。今度は、かなり、コンパイルが進み、std::addressof関連箇所は通過しているため、boostのバージョンアップは正解だったらしい。

 ここで、エラー「error: ‘nullptr’ was not declared in this scope」発生。どうやら、gcc 4.5.xでは、nullptrが未サポートらしい。これが、gcc 4.6以上推奨の理由らしい。

 しかし、gccのバージョンアップは手間が掛かるのでw、参考ウェブページ[7]のように、-Dnullptr=0で逃げてみることにした。以下のように、MikuMikuOnlineのサーバのMakefileのCXXFLAGSを書き換えている。

CXXFLAGS = -v -g -ggdb -Wall -std=gnu++0x -Dnullptr=0 -I/usr/include/cryptopp -I/usr/local/include

 ビルドの途中に、パッケージopenssl,openssl-staticをインストールした。libsslが不足していたためである。一緒にopensshも更新しないと、sshが利用できなくなるので、注意が必要である。

 こうして、かなりの日数を費やし、MikuMikuOnlineサーバのビルドは完了した。

 早速、/etc/sysconfig/iptablesを書き換えて、所定のポート番号を開放する。

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport XXXXX -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport XXXXX -j ACCEPT

 サーバを起動し、クライアントと接続してみたが、できなかった(汗)。

 ログに残された「ERROR: unsupported version」を頼りに、boostが怪しいと当たりを付けて、検索してみると、Boost/serializationで、serializationのバージョンチェックを行っており、そのクライアント・サーバ間のバージョン違いのためにエラー発生らしい…。困った。

 とりあえず、開発元に連絡を入れて、boost 1.58.0でビルドしたクライアントをリリースしてくれるかどうか、尋ねてみようと思う。ビルドまで出来たところまでは良かったが、接続できなかったのは非常に残念…。

[参考ウェブページ]

[1]MikuMikuOnlineをCentOS上で動かそうとしてみた(途中)

[2]Status of Experimental C++0x Support in GCC 4.5

[3]Vine Linux に gcc4 をインストールする

[4]boost Version 1.58.0

[5]リリース詳細: 0.3.5 () - Miku Miku Online - SourceForge.JP

[6]日記/2012-09-14/MikuMikuOnlineサーバの構築方法 - PukiWiki

[7]C++0x の nullptr ~GCC であれれ?

[8]MikuMikuOnline wiki



にほんブログ村 トラコミュ MikuMikuDance(MMD)情報へ
MikuMikuDance(MMD)情報
スポンサーサイト

テーマ : ソフトウェア
ジャンル : コンピュータ

広告バナー

コメントの投稿

非公開コメント

最新記事
最新トラックバック
最新コメント
カテゴリ
検索フォーム
アイコン
のんのんびより
超訳百人一首 うた恋い。
あっちこっち
けいおん!!
機動戦士ガンダム
キャラ&ホビー格安通販 あみあみ
Google+
お知らせ
現在、私事で忙しくて、TB返しが出来ない状態にあります。落ち着いたら、TB返しを開始しますので、よろしくお願いします(2013/05/10)
Twitter
QRコード
QRコード
メールフォーム
このブログに関するお問い合せなどにお使いください

名前:
メール:
件名:
本文:

ブロとも申請フォーム

この人とブロともになる

ガリレイドンナ
ゆるゆり
ココロコネクト
アイドルマスター
牙狼<GARO>
アニメDVD
キャラアニ
月別アーカイブ