初版: 2003/01/06
最終更新日:
2003/02/22
「Hello, world」
のような簡単なのがコンパイルできたので、
調子に乗って、いろんなフリーウェアをコンパイルしてみました。
2003/02/22追記:
日本語変換システム「SKG」についての
リンクもごらんください。
まず、ソース一式 (ng-1.4.3.tar.gz) を用意して、 これを適当なディレクトリで展開します。 ソースのアーカイブは、手元にあった 「ぷらっとほーむ Release & Write vol.18 FreeBSD 4.3 DVD」の 二枚目ディスクのusr/ports/distfiles/ng-1.4.3.tar.gzを使いました。
ソースの展開は以下のようにしました。
% tar xzvf ng-1.4.3.tar.gz % cd ng次にドキュメントを熟読します。
% more docs/README.Ngコンパイルの手順がわかったところで、 メイクファイルの準備をします。 ドキュメントではln(1)を使ってますが、安易にcpしました。
% cp sys/sysv/Makefile .次に、メイクファイル中のコンパイラの指定を変更しておきます。 「CC」行の右辺を「gcc」から 「/compat/linux/opt/Embedix/tools/bin/arm-linux-gcc」にします。 ここでmakeを実行すると、
% make rm -f ttydef.h ln sys/default/ttydef.h . rm -f sysdef.h ln sys/sysv/sysdef.h . rm -f chrdef.h ln sys/default/chrdef.h . /compat/linux/opt/Embedix/tools/bin/arm-linux-gcc -O -c basic.cのようにコンパイルが始まります。しかし、しばらくすると、
/compat/linux/opt/Embedix/tools/bin/arm-linux-gcc -O -c canna.c /compat/linux/opt/Embedix/tools/bin/arm-linux-gcc -O -o ng basic.o dir.o dired.o shell.o version.o window.o kinsoku.o jump.o buffer.o complt.o display.o cmode.o echo.o extend.o file.o help.o kbd.o keymap.o line.o macro.o main.o match.o modes.o paragraph.o random.o region.o regex.o re_search.o search.o skg.o kanji.o undo.o word.o cinfo.o spawn.o ttyio.o tty.o ttykbd.o fileio.o canna.o -lcurses /opt/Embedix/tools/arm-linux/bin/ld: cannot find -lcurses collect2: ld returned 1 exit status *** Error code 1 Stop in /tmp/ng.となり、実行ファイルを作成するところまでいきません。
これは、 「/opt/Embedix/tools/arm-linux/bin/ld: cannot find -lcurses」 というエラーメッセージで示されるとおり、 cursesライブラリが存在しないことが原因です。
クロスコンパイラ一式の中にこのライブラリがないものかと
% find /compat/linux/opt/Embedix/tools -name '*curses*' -printで探してみましたが、存在しないようです。 仕方がないので、SLザウルスに入っているライブラリをコピーして使うことにします。 リンカは「-lcursesがない」とエラーメッセージを出しているので、 必要なファイルは「libcurses.*」です。 これをSLザウルスで探してみましたが存在しません。 しかし、代わりに使えるものがちゃんとありました。 それは「/usr/lib/libncurses.so」です (なお、このファイルはシンボリックリンクで、 実体は「/lib/libncurses.so.4.2」です)。
コンパイルに必要なファイルがわかったので、これを SLザウルスからコピーして 「libncurses.so」という名前でカレントディレクトリに置きます。 さらにMakefileを変更して、「LIBS」行の 「-lcurses」を「-lncurses -L.」とします。 変更部分はメイクファイルの差分 (ng143.patch) を参照してください。
Makefileを修正したらメイクしてみます。
% make /compat/linux/opt/Embedix/tools/bin/arm-linux-gcc -O -o ng basic.o dir.o dired.o shell.o version.o window.o kinsoku.o jump.o buffer.o complt.o display.o cmode.o echo.o extend.o file.o help.o kbd.o keymap.o line.o macro.o main.o match.o modes.o paragraph.o random.o region.o regex.o re_search.o search.o skg.o kanji.o undo.o word.o cinfo.o spawn.o ttyio.o tty.o ttykbd.o fileio.o canna.o -lncurses -L. spawn.o: In function `call_process': spawn.o(.text+0x34c): the use of `mktemp' is dangerous, better use `mkstemp'なんか「spawn.*で使こてる mktemp() 関数はキケンや。mkstemp() を使いなはれ」 とウォーニングが出てますが、まぁよしとしましょう(笑)。
さて、以上のとおり、「CC」と「LIBS」を変更したMakefileを使うと 無事コンパイルすることができました。
SLザウルスで「ターミナル」を起動すると、 ユーザIDは「zaurus」で、 ホームディレクトリは「/home/zaurus」です。 とりあえず、ホームディレクトリの下にでも転がしておいても使えますが、 この場合は、起動するたんびに
bash-2.05$ /home/zaurus/ngのようにフルパスで指定してやる必要があります。 これはエレガントな方法ではありません。
コマンドの名称(ファイル名)だけで起動するには、 実行ファイルを環境変数「$PATH」に登録されているディレクトリ (たとえば、「/usr/local/bin」など) に置くか、 自分用のコマンド置き場を作り、そのディレクトリを$PATHに登録する 方法があります。 前者の場合は「su」コマンドで管理者に変身する必要がありますし、 このときに間違ってシステムファイルを消したりしてしまう危険性があるので、 今回は後者を選択することにします。 そして、コマンド置き場はホームディレクトリの下のbinにします (つまり「/home/zaurus/bin」ディレクトリに実行ファイルを置きます)。
方針が決まったところで、ファイルを置きます。 たとえば、こんな感じで。
bash-2.05$ mkdir /home/zaurus/bin bash-2.05$ cd [Ngの実行ファイルが置かれているディレクトリ] bash-2.05$ cp ng /home/zaurus/bin bash-2.05$ chmod +x /home/zaurus/bin/ngそれから、今作った「/home/zaurus/bin」をパスに登録します。 これには、ホームディレクトリに「PATH=$HOME/bin:$PATH; export PATH」と いう内容で「.profile」と「.bashrc」の二つのファイルを 作成します。
bash-2.05$ cd bash-2.05$ echo 'PATH=$HOME/bin:$PATH; export PATH' > .profile bash-2.05$ echo 'PATH=$HOME/bin:$PATH; export PATH' > .bashrc最後に一度、「ターミナル」を終了しておきます (なお、終了しないですませる方法もあります)。 ザウルスをリブートする必要はありません。
以上で準備完了です。 「ターミナル」を動かして「Ng」を動かしてみましょう。
bash-2.05$ ngなお、Ngの終了は、「Ctrl-X」→「Ctrl-C」です。 SLザウルスでは「Fn+X」→「Fn+C」を押します。
Ngを起動して、ファイルを開き、 手書き認識で日本語を入力しているところを以下に示します (*scratch*バッファに「日本語も入力できます」と入れているところ)。
ちなみに実行形式は ここ (ng143-bin-slzaurus.tgz) です。
日本語変換システム「SKG」についての リンクもごらんください。