Subscribed unsubscribe Subscribe Subscribe

sci

最果て風呂

SQLite3 をなんとかビルドする

Vim って便利だね」という視点で(2012.01.24)に書いていた記事です。

まったく使っていないし、この先も使う予定が無いのだけれど、ビルドの練習台になってもらっている sqlite3。この度のバージョンアップ(3.7.10)でいよいよビルドができなくなってしまった。何やら libkern/OSAtomic.h が見付からないとのこと。

locate で探すと /System/Library/Frameworks/ 以下にあったので、MakefileCFLAGS=-I で指定してみる。Vim で編集しているのであれば、このまま

:make

とすれば実行してくれる。便利だね。

ぐぬ〜、またしてもエラーになってしまった。今度は bool がどうのこうのなのだけど、Vim はエラーの発生したソースの場所を表示してくれるのであった。これが QuickFix 機能というらしい。なんか便利。

眺めてみると __APPLE__ の場合に cpu の数に合わせてなにか調整するみたい。以前のバージョンでは存在していなかったので、ここに問題がありそう(以前はどうであったか?という視点を持てることは重要で、継続は力なりだと思った)。iBookApple だけど Apple ではないので、この部分(if節)をコメントアウトして再度 :make。最後まで進行し、バイナリが作成された。

Mac 向けのソフトウェアは Intel のマルチコア CPU を対象としていて、PowerPC G3 にとっては辛い状況。gcc も 3.3 だし...。sqlite3 --version でバージョンが表示されるところまでの動作確認は終了。実際にデータベースを動かしてみると...

> lv sql-table-init.sql
create table money (date, pay integer, note);
> sqlite3 money.db < sql-table-init.sql
> sqlite3 -separator , money.db ".import sampledata.csv money"
The process was killed by SIGBUS: Bus error

になってしも〜た。よくよく見てみると、defined(__APPLE__) で判定されている箇所多過ぎ。メモリの確保も違うみたいだし。__APPLE__ を 0 にすればいいのかな?でもどこで?ということで、私のマシンではバージョン 3.7.9 までで終了。

この前の続き。 bool は #include <stdbool.h> で定義されているのでこれを読み込めば良いとのことだった。実際に追記してみると bool についてのエラーはなくなった。続いては

ld: Undefined symbols:
_OSAtomicCompareAndSwapPtrBarrier

についてなんだけど、sqlite-usersOSX 10.4 で 3.7.10 をビルドできないというスレを見つけた。どうやら ifdef__APPLE__ に引っ掛かると、こちらの処理に誘導されるそうな。で、OSAtomicCompareAndSwapPtrBarrier は新しい OS でしか使えないらしいのでうまくないと。

英語を流し読みしたところによると「patch をした後に -DSQLITE_WITHOUT_ZONEMALLOC オプションを付けてビルドしてごらん」とのことだった。sqlite3.cソースコードってひとつにまとめられているようで、「すごく...大きいです」。133600 行もあるので Emacs で開くと 10 秒くらい待たなければならないのだが、Vim で開くと 3 秒くらいなのでストレスが無い(あくまでも使用者の体感であり意見です)。さすが改行指向だ。

さて、本題に戻ってパッチ作業なのだけど、やり方がよくわからん。そんな訳でウェブブラウザで見ながら手打ち入力することにした。コメントも丁寧に付いていたけれど無視してコードだけを入力した(^^;)。 Makefile へのオプションは下記の通りで、先程 sqlite3.c に記述した「#include <stdbool.h>」は削除した。

CFLAGS = -DSQLITE_WITHOUT_ZONEMALLOC -DSQLITE_ENABLE_LOCKING_STYLE=0 -Wno-long-double

ビルドは完了。前回と同じ実験をしてみると見事にデータベースを作成することができた。どうやら問題ないようです。

自分はテキストファイルをスクリプトで抽出する程度でしかパソコンを利用していないので、データベースを使う能力は無いっす。そのため「推定」にしかなりませんが「OS X 10.3 でもビルドはできる」と言えるでしょう。やったね(ゝω・)v。

追記。 文中で散々「使ってない」と書いてありますが、現在では Sinatra で画像閲覧アプリを作って細々と使っています。