(2016.2.6.)
QEMU 2.4.1 を Mac OS 10.6 にインストールしてみた。2016年2月の時点で、10.6 はすでにサポート終了、過去の遺物だけど、引っかかったところを記録しておけば、何かの役に立つかも。
qemu
を普通に configure
しようとすると、こんな風に怒られる。
新しめの gcc
が必要。以前にインストールした gcc-4.7.1
を、objc
, obj-c++
を有効にして再インストール。
qemu
のビルドを再トライ。
pkg-config
が必要。
--with-internal-glib
をつければいいのか。
CoreFoundation (CF****) と Carbon (FSFindFolder) をリンクしないといけない模様。
できた。
qemu
のビルドを再トライ。
glib2
と gthread
が必要。このへんから後は、/usr/local
がごちゃごちゃにならないように、/Applications/QEMU
内にインストールする。(後から考えると、あまり利口な選択ではなかった。/usr/local/
内で良かった。)
glib-2.47.5.tar.xz
を取得 (http://ftp.gnome.org/pub/gnome/sources/glib/2.47/)。tar.xz
ファイルは TheUnarchiver で解凍する。
glib2
は gettext
に依存するので、こちらを先にインストールする。
gettext-0.19.7.tar.gz
を取得 (http://ftp.jaist.ac.jp/pub/GNU/gettext/)。
libxml2
が必要らしい。
libxml2-2.9.1
を取得 (http://xmlsoft.org/sources/)。
できた。
gettext
やり直し。
先ほどと同じエラーになった。libxml2
を認識してない。
成功。
glib2 のビルド。
やかましいわ。こっちにはこっちの事情があるんじゃい。
調べてみると、glib-2.39.92
なら 10.9 以上の制約はない模様。
libffi
が必要らしい。
libffi-3.0.13
を取得 (https://github.com/atgreen/libffi/releases) 。ftp でうまく接続できなかったので、https で取れる github の方からもらってきた。
成功。
glib2 のビルド再挑戦。
ああ、libffi
を見つけてないわ。PREFIX
つけてインストールしたからだな。PKG_CONFIG_PATH
を設定すればいい?
今度は gettext
か。Stack Overflow の記事を見ると、PATH
に PREFIX/bin
を加えればいいらしい。env
コマンドを使ってもいいけど、PATH
に入れてしまっても大丈夫そうだから、入れちゃえ。
あれーだめじゃん。なんでや。config.log
見ると、libintl.h
を見つけられなかったらしい。っつうことなら、これでどうだ。
よし通った。make
行くぞ。
うわ、何これ? エラーが起きているのは gio/gdummyfile.c
の中だが、どう見てもおかしいようには見えない。ネットで探してみると、homebrew の人が議論していた。gio
の中で、全部のファイルを Objective-C と見なしてコンパイルしているのが原因らしい。それ雑すぎやろ。
対処法:gnextstepsettingsbackend.c
を gnextstepsettingsbackend.m
に変更し、Makefile.in
と Makefile.am
中の gnextstepsettingsbackend.c
をすべて gnextstepsettingsbackend.m
に変更する。また、Makefile.am
の 520 行にある libgio_2_0_la_CFLAGS += -xobjective-c
の行頭に # をつけてコメントアウト。
configure
からやり直し。
うぬー automake
更新しないとだめか。なるべくこれは避けたかったが。
autoconf-2.69
, automake-1.15
, m4-1.4.17
を /usr/local
以下にインストール。これは普通に ./configure; make && sudo make install
で問題なくできた。
もっかい configure
からやり直し。
えー同じバージョンでないといかんの? なんじゃそれ。これだから automake
は嫌いなんや。
automake-1.13
を入れ直して再トライ。
ぐぬー、configure
自体作り直しですか。
configure.ac
の 114 行目に AC_PROG_OBJC
を追加。
おおー通った。これで最大の難関突破かな。
qemu
ビルド行きます。
うーん、また autoconf
関連か。autoconf
, automake
, m4
, libtool
を --prefix=/Applications/QEMU
でインストールし直して、もう一度トライ。
なんだかよくわからないエラーになったぞ。1つ前のバージョンでやってみるか。
同じだな。何か根本的に問題がある? こんな記事があった。pkg.m4
が読まれていないようだ。なるほど。pkg.m4
は PREFIX/share/aclocal/pkg.m4
にある。aclocal
のサーチパスを設定してみる?
やっぱり同じエラーが出る。手動で automake
してみる?
さっきのところは通過できたみたい。何だったんだろう?
今度は別のエラーが発生。
リンクエラーだな。configure
の出力をよく見ると、obj-C コンパイラとして clang
を使うことになっている。これが原因か?
やっぱりだめ。同じエラーが出る。調べてみると、こんな書き込みを見つけた。そもそも Makefile
が間違っているらしい。なんでそんなのが放置されてるんかな。pixman/test/Makefile
に次のように書き込む(行末に utils.$(OBJEXT)
を追加)
やってみる。
そうか、Apple 製でない gcc では obj-c 2.0 はコンパイルできないのか。objc だけ他のコンパイラにするのはたぶん無理だと思う。cocoa.m をざっと見た感じでは、obj-c 2.0 の機能を使っているのはここだけっぽい。また、そもそもこの行に問題あり。
beginSheetModalForWindow:completionHandler:
は Mac OS 10.9 以上でないと動作しない。#if
で 10.6 以上の場合のみコンパイルするようになっているが、無理でしょ。
905行の MAC_OS_X_VERSION_10_6
を MAC_OS_X_VERSION_10_10
に変更。さらに、#else
の中にもエラーがあったので、下の行 (913行) の filetypes
を supportedImageFileTypes
に変更。
この変更で、ここのコンパイルは通るようになった。
さらに謎のエラーが発生。
vtable
云々のエラーは C++ のランタイム関係らしい。--cxx=gcc
がいかんのか? --cxx=g++
でどうだ。
ついに通った! やった!
qemu-*
というバイナリが PREFIX/bin
の中にできる。Mac のアプリケーションバンドルではなく、コマンドラインから立ち上げたらウィンドウが開くタイプ。リンクしているライブラリは、/usr/lib
の中のものを除くと以下の通り。
実行ファイルに含まれるライブラリのパス名を変えるには install_name_tool
を使う。@executable_path
を使えば実行ファイルがあるディレクトリからの相対パスで書ける。今のレイアウトだと dylib
がごちゃごちゃになっているので、例えば /Applications/QEMU/lib
に全部まとめるのがいいかも。
Raspberry Pi のエミュレーション実行方法。
立ち上がったぞ。やったあ。
残念ながら、このままでは耐えられないぐらい遅いです。いろいろチューニングが必要なのだと思う。なお、CUI タイプの jessie-lite は素のままでも使える速度だった。
次のようにすると、Mac 側から ssh で QEMU の中の Raspbian に接続できる(最後に -redir tcp:10022:22
を追加)。
Raspbian が立ち上がったら、Mac のターミナルで別ウィンドウを開いて、次のようにすると、ssh 接続できる。