Linux」カテゴリーアーカイブ

xclannadその3

最初のコンパイルエラーが出たときのメッセージが違ってた。先に書いた奴はコメントアウトしたときのです。下記が最初に出た奴。
g++ -c -I.. -g -O2 -DHAVE_CONFIG_H -I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -pthread -O2 -o scn2k_grp.o scn2k_grp.cc
scn2k_grp.cc:104: error: extra qualification ‘GrpObj::’ on member ‘ParseMoji’
make[1]: *** [scn2k_grp.o] エラー 1

xclannadその2

よく見たらldで失敗してた。
g++ -o xclannad xlovesys.o system/libsystem.a scn2k/libscn2k.a window/libwindow.a font/libfont.a music2/libmusic.a -lfreetype -lz -lSDL -lpthread -lSDL_mixer -lsmpeg -lSDL -lpthread -lvorbisfile -lvorbis -logg -ljpeg -lpng -lz -pthread
font/libfont.a(font_peer_x11.o): In function `XKFont::PeerX11::GlyphCreate(unsigned int, XKFont::Glyph*)’:
/home/takky/xclannad-0.07g/font/font_peer_x11.cc:389: undefined reference to `XShmGetImage’
font/libfont.a(font_peer_x11.o): In function `~PeerX11′:
/home/takky/xclannad-0.07g/font/font_peer_x11.cc:365: undefined reference to `XShmDetach’
/home/takky/xclannad-0.07g/font/font_peer_x11.cc:365: undefined reference to `XShmDetach’
/home/takky/xclannad-0.07g/font/font_peer_x11.cc:365: undefined reference to `XShmDetach’
font/libfont.a(font_peer_x11.o): In function `PeerX11′:
/home/takky/xclannad-0.07g/font/font_peer_x11.cc:317: undefined reference to `XShmQueryExtension’
/home/takky/xclannad-0.07g/font/font_peer_x11.cc:320: undefined reference to `XShmCreateImage’
/home/takky/xclannad-0.07g/font/font_peer_x11.cc:337: undefined reference to `XShmAttach’
/home/takky/xclannad-0.07g/font/font_peer_x11.cc:317: undefined reference to `XShmQueryExtension’
/home/takky/xclannad-0.07g/font/font_peer_x11.cc:320: undefined reference to `XShmCreateImage’
/home/takky/xclannad-0.07g/font/font_peer_x11.cc:337: undefined reference to `XShmAttach’
collect2: ld はステータス 1 で終了しました
make: *** [xclannad] エラー 1
どうやらライブラリが足りないっぽい。Xshm系ルーチンがよく解らなかったので調べてみると、X11の拡張ルーチンだった。よくコマンド行を見てみると、X11関係のライブラリが指定されてないし。configure時に何か指定しないと駄目なのか謎です。中身を見てみるとX11関係も入ってるので、それで追加されるであろうライブラリをMakefileのLDFLAGSに加えてみたら問題なくリンクできました。
インストールし、ゲームCDを挿入し、CDをマウントし、xclannadを実行してみると…即死でした。表示されるルートパスがデフォルト値となっており、うちがいじったソースのパスは反映されてないみたいです。仕方ないので起動引数にルートパスを設定したら無事動作しました。フルスクリーンも-fオプションで問題なく起動を確認。ゲーム中に切り替えられるみたいですけど、READMEにはやばそうな記述もあるので無茶しないほうがいいみたい。
ウインドモードで起動すると、タイトル行の表示がヤバいっぽい。うちはUTF-8環境なのでEUCで漢字を出そうとしてるのかもね。まあ、ゲームに支障なさそうですのでこのままでいいです。
一度クリアしたゲームですけど、久々にプレイしてみるのもいいかも。

xclannad

portage内には無いみたいですので、ソースを拾ってきてコンパイルしてみました。READMEに書いてあるライブラリなどは入ってたので、指定されたソースを書き換え、configureとmakeを実行しました。
g++ -c -I.. -g -O2 -DHAVE_CONFIG_H -I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -pthread -O2 -o scn2k_grp.o scn2k_grp.cc
scn2k_grp.cc:454: error: no ‘TextStream GrpObj::ParseMoji(const char*, int, int, int, int)’ member function declared in class ‘GrpObj’
make: *** [scn2k_grp.o] エラー 1
こんなエラーが出てコンパイル停止。C++はよく解らんので、ソースをみてもさっぱり。コメントアウトすると別の箇所でエラーになるのでぐぐってみた。
http://daemon.plala.jp/~meke/tdiary/?date=20051217
ここのgcc関係の記事っぽいです。「GrpObj::」を削って再度makeしたら問題なくバイナリができたみたいです。実行は後日。実行前にCLANNADのゲームソフトを探さねば。

gdb

結構コンパイルに時間がかかった。早速作成中のプログラムをデバッグ。
起動してブレイクポイントを設定と思ってソースを出そうとしてみるも出ず。コマンドを間違ったか?と思って色々試すが間違ってないし。会社のマシンとかいろいろあるのでデバッガなど使うときはよくコマンドを間違えたりするのですけどね。で、ソースが出なかった原因がシンボルテーブルでした。開発中ソースはよく-gをつけてコンパイルしますけど、実際に動かすときはテーブルを外してしまいます。オプティマイザのバグによりバグが発生する時もありますけど、基本的に信じて動かすしかないので。それで大抵-gなしってのを忘れてたりするわけです。
今回はmemcmpするメモリ内の値が予想できないものになってそうという疑いがあったのでdisplayコマンドでブレイクポイントにヒットしたらメモリ内容を表示させるようにしてました。該当のデータが読み込まれ、ヒットしてみると原因がよく分かりました。
原因が分かるとデバッグも楽しいですけど、業務で解らんバグにハマるとブルーになりますよね。

フォントを追加

portageで管理されてるフォントはemergeでインストールできますが、MSのフォントは通常インストールできません。著作権の問題もあるので、自分のマシンに入ってるものを平行利用という形で使うしかないと思われます。
まず、フォントを/usr/share/fonts/配下の適当なディレクトリへコピーし、xorg.confのフォントパスを追加。置いたディレクトリ内でttmkfdirコマンドでfonts.scaleを生成。そしてmkfontdirコマンドでfonts.dirを作成します。このままだと日本語対応じゃないみたいで、fonts.dirを編集し、各設定の中でいろいろな言語用の設定があるので最後の部分を「jisx0208.1983-0」にした設定を付け加えればいけます。うちは再起動しましたが、システムのフォント設定にMSゴシックなどが加わりました。各アプリで使えるかは別ですが、一応GNOME上では使えるっぽい。
MSフォントはWindowsで作られたPDFを閲覧する場合必要なケースがあるそうで。うちは東風で事足りてるので満足ですが。

DVDが再生できない

mplayerで「No stream found to handle url dvd://」とエラーが出てしまいました。そういえば、メディアを挿入してもマウントできないってメッセージも出たなぁ…。以前はうまくいってました、なんらかのタイミングでNGになるってことは何かの設定が戻ったってことですね。
調べてみると/dev/hdc(うちのドライブはhdcがこう光学ドライブ)のオーナーとパーミッションがオーナーとグループのみになってた。以前は強引に書き換えましたが、戻るという同じことがおきるので書き換えは駄目ってことだね。オーナーはroot.cdromなので、自分のユーザーをcdromグループに追加すればいいだけだね。
そういえば、ゲームとかオーディオ系もグループに自分のユーザーを追加していくって文化なのでそれに習うしかないですね。こういう暗黙のルール見たいなのがわかりにくい世界なんだよね。知ってるひとは当たり前のことですけど、これから知る人に技術伝承できてないってのが問題ありそう。この辺りがLinuxを使う全てに当てはまりそう。

ライティングとか

X-CD-Roastが良さそうだったのでインストールしてみました。しかし、ルートで設定してみろみたいなエラーが出て、ルートで設定しても使えん状態でした。こうなると調べるのも面倒ですので、GnomeBakerを代わりにインストール。こちらは見た目で操作できそうですし、いいかもです。
取り急ぎ焼くものは無いのでこのまま放置かな?

リコンパイル

前に書いた方法だと更新された差分のみみたいですね。
emerge -ue worldならできるか?と思ったらこちらはgccまでコンパイルして自滅してました。
まあ、コンパイラ以外はマイナーバージョンがどんどん上がるからしばらく更新分をコンパイルしてれば問題なく使えるでしょう。
先日totemで出てたエラーをリコンパイルしてみてと思ってたのですけど、しかたないので怪しそうなGTK+をコンパイルし、totemをコンパイルしなおしてみます。動的リンクしてるならライブラリ飲みのコンパイルでいいですけど、静的リンクしてたら使う側もコンパイルが必要ですしね。これらの関連がよく見えなくてちょっと不安になってくる。

ストリーミング

Windowsの共有からmp3を再生させる件はどうもわからんので、Windows側にShoutCASTサーバを設定して聞くことにしました。プレイヤーはtotemでもmplayerでもURL指定できるものは問題ないみたいです。ShoutCASTの仕組みはやってみてわかりましたが、再生の制御はWinampで行い、DSPプラグインでShoutCASTサーバと通信。ShoutCASTサーバとはそれぞれのプレイヤーでhttpのポート8000で通信しての再生っぽいですね。Winampに再生させておくプレイリストを作って再生させ、現時点で再生してる箇所から聞こえてくるという。バッファリングする関係で、段々ずれてるような感じですが、6時間くらいならしてたら突然音がでなくなった感じなのですが、原因は究明してません。
まあ、BGMとして再生しっぱなしにするにはいいかも?なんて思いましたが、Windowsで再生してればそれでもいいのか?とか思ったり。サーバにしたマシンはゲームでよく使うので微妙ですけど、できるならサーバ専用のマシンにインストールしてWindows共有を参照しつつプレイリストを流しっぱなしの環境が作れればなぁ…と思ってます。外への公開は全然考えてませんのでつなげばいつでも再生ってのが理想と思ってます。
次は何をしようか考え中。ちょうどいいのでオールリコンパイルってのもいいかも。

mp3の謎

ノーチラス経由でWindowsマシンの共有にあるmp3を鳴らそうと思いましたが、totemが落ちて駄目です。aviは問題なく再生できてますけど、mp3が駄目っぽい。.xsession-errorsを表示してみると、mp3をクリックした時、「(gnome_segv2:8861): Gtk-WARNING **: cannot open display:」と出てました。検索してみたけど事例はなし。別マシンからの起動でDISPLAY変数の設定が駄目とかの事象ならありましたけどね。コンソールからtotemを起動しても同じ事象でした。また、mp3をローカルにコピーしてしまえば難なく演奏されます。つか、デスクトップとかだとマウスカーソルをあわせただけで演奏してくれるのですね。結局わからず仕舞いです。USEフラグも変更したのであとでsyncしてから再コンパイルしてみるしかないでね。
次にFirefoxの問題…というか設定がわからず。うちはThinkPadなのでマウス操作はトラックポイントになります。左右クリック、ポインタ移動は全く問題なしですが、問題はセンターボタン。通常センターボタンとして動作させ、押しながら上下ポインタ移動でホイールを兼ねてます。ここまではいいのですが、クリップボードにコピーされてる文字列をダブルセンタークリックで検索する機能がFirefoxにありまして、これが非常に邪魔だったりする。なんとか設定でOFFできないかな?なんて思って調査してます。Firefox自体のソースに手を入れないと駄目なら諦めですけど、設定でなんとかなるならOFFにしたいです。優先度低いのでじっくり探してますけど、駄目っぽい感じが。
今日はフォント類、おちゅーしゃをインストール。2ch関係を閲覧できるようにしてみようかと。もしかすれば上記問題点も質問できるでしょうし…回答があるかは別ですが。