初版: 2003/01/11
最終更新日:
2003/01/20
% /compat/linux/opt/Embedix/tools/bin/arm-linux-gcc script.c script.c:57: libutil.h: No such file or directory「libutil.hがあれへんで」というエラーが出てコンパイルできません。 どこかにファイルがないものかと、SLザウルスの中身を漁ってみたり、
% find /compat/linux -name libutil.h -printと、Linuxエミュレータやクロスコンパイラのツリーのしたを探っても やっぱりありません。しょーがないので、FreeBSDのlibutil.hをパクって そのままコピーします。
% cp /usr/include/libutil.h .ここで再度コンパイルを試してみると、
% /compat/linux/opt/Embedix/tools/bin/arm-linux-gcc -I. script.c script.c:74: parse error before `__dead2' script.c:74: warning: data definition has no type or storage class script.c:264: warning: type mismatch with previous implicit declaration script.c:259: warning: previous implicit declaration of `done' script.c:264: warning: `done' was previously implicitly declared to return `int'とエラーになります。 ってことで、ソースをちょっといじってみました (script.patch)。 すると、
% /compat/linux/opt/Embedix/tools/bin/arm-linux-gcc -I. script.c /tmp/ccUbfJ46.o: In function `main': /tmp/ccUbfJ46.o(.text+0x22c): undefined reference to `openpty' /tmp/ccUbfJ46.o: In function `doshell': /tmp/ccUbfJ46.o(.text+0x930): undefined reference to `login_tty' collect2: ld returned 1 exit status今度はコンパイルはできるものの、 関数が足りないので実行形式を作るところまではいきません。
ここで足りないといわれている関数 (openptyとlogin_tty) は、 libutilライブラリに入っているものなので (マニュアルページopenpty(3)などを参照してください)、 これを探してみると、
% find /compat/linux/ -name 'libutil.*' -print /compat/linux/lib/libutil.so.1 /compat/linux/opt/Embedix/tools/arm-linux/lib/libutil.a /compat/linux/opt/Embedix/tools/arm-linux/lib/libutil.so /compat/linux/opt/Embedix/tools/arm-linux/lib/libutil.so.1のようにライブラリが見つかりました。
ということで、最終的に次のようにコンパイルしました。
% /compat/linux/opt/Embedix/tools/bin/arm-linux-gcc -o script -I. -L/opt/Embedix/tools/arm-linux/lib script.c -lutilところでできあがったファイルは、
% ls -l script -rwxr-xr-x 1 dai wheel 20176 Jan 11 23:19 script % file script script: ELF 32-bit LSB executable, ARM, version 1 (ARM), dynamically linked (uses shared libs), not strippedのように、約20kバイトの大きさですが、fileコマンドによると 「ストリップされてない」と出ます。そこで、 stripコマンドでシンボルテーブルを削除します。
% /compat/linux/opt/Embedix/tools/bin/arm-linux-strip script dai@linguine:../script.test % ls -l script -rwxr-xr-x 1 dai wheel 7904 Jan 11 23:23 scriptすると、サイズが8kバイトほどに縮みます。 当社比40%というか(笑)。 ストレージにあまり余裕のないSLザウルスには、 こういう小技も重要かもしれませんね。
これでなんとかscriptをコンパイルできました。 ちなみに実行形式は ここ (script-bin-slzaurus.tgz) です。 無事に動くんでしょうか?(笑) いえ、実は微妙に動きません(爆)。
よく調べてませんが、Slackwareのscriptのソースからコンパイルしたのは うまく動いているようです。 ちなみにこちらの実行形式は ここ (script-slack-bin-slzaurus.tgz) です。 ソースに対するパッチは ここ (script-slack.patch) です。 コンパイルは
% /compat/linux/opt/Embedix/tools/bin/arm-linux-gcc -o script -DHAVE_openpty script.c -lutilで行いました。