初版: 2003/01/12
最終更新日:
2003/09/20
まず、configureを動かしてみます。
% ./configure creating cache ./config.cache checking host system type... i386-unknown-freebsd4.6.2 <中略> creating Makefile creating config.h当然ですが、FreeBSD向けのファイルが生成されます。
次にクロスコンパイラでコンパイルしてみます。
% make 'CC=/compat/linux/opt/Embedix/tools/bin/arm-linux-gcc' grep 'ERR_' ./sh.err.c | grep '^#define' >> sh.err.h gcc -E -I. -I. -D_PATH_TCSHELL='"/usr/local/bin/tcsh"' -D_h_tc_const ./tc.const.c | grep 'Char STR' | sed -e 's/Char \([a-zA-Z0-9_]*\)\[\].*/extern Char \1[];/' | sort >> tc.const.h /compat/linux/opt/Embedix/tools/bin/arm-linux-gcc -c -g -O2 -I. -I. -D_PATH_TCSHELL='"/usr/local/bin/tcsh"' sh.c /compat/linux/opt/Embedix/tools/bin/arm-linux-gcc -c -g -O2 -I. -I. -D_PATH_TCSHELL='"/usr/local/bin/tcsh"' sh.dir.c一応スムーズにコンパイルしているようですが…
/compat/linux/opt/Embedix/tools/bin/arm-linux-gcc -c -g -O2 -I. -I. -D_PATH_TCSHELL='"/usr/local/bin/tcsh"' tc.const.c rm -f gethost /compat/linux/opt/Embedix/tools/bin/arm-linux-gcc -o gethost -g -O2 -I. -I. -D_PATH_TCSHELL='"/usr/local/bin/tcsh"' ./gethost.c -ltermlib -lcrypt /opt/Embedix/tools/arm-linux/bin/ld: cannot find -ltermlib collect2: ld returned 1 exit status *** Error code 1 Stop in /tmp/tcsh.gethostをコンパイルするところで止っていまいます。 これは、termlibライブラリ (libtermlib.*) が存在しないからです。 このライブラリをSLザウルスからコピーしてきて、 CCに「-L.」オプションをつけるとなんとかコンパイルはできます。
% make 'CC=/compat/linux/opt/Embedix/tools/bin/arm-linux-gcc -L.' rm -f gethost /compat/linux/opt/Embedix/tools/bin/arm-linux-gcc -L. -o gethost -g -O2 -I. -I. -D_PATH_TCSHELL='"/usr/local/bin/tcsh"' ./gethost.c -ltermlib -lcrypt ./gethost ./host.defs >> tc.defs.c ./gethost: 1: Syntax error: word unexpected (expecting ")") *** Error code 2 Stop in /tmp/tcsh.しかし、コンパイルされたgethostコマンドでtc.defs.cを生成しようとした ところで止ってしまいます。SLザウルス向けのバイナリをFreeBSDで実行できる はずはありませんから、しょーがないですね。 そこで、gethostだけはFreeBSD向けにコンパイルしてみます。 さらに、FreeBSD向けにコンパイルしたgethostでtc.defs.cを生成してみます。
% /bin/rm gethost % make gethost rm -f gethost gcc -o gethost -g -O2 -I. -I. -D_PATH_TCSHELL='"/usr/local/bin/tcsh"' ./gethost.c -ltermlib -lcrypt % make tc.defs.c ./gethost ./host.defs >> tc.defs.cこうすればtc.defs.cを生成できます。 あまりよい方法ではありませんが(爆)。
さらに続きをコンパイルしてみます。
% make 'CC=/compat/linux/opt/Embedix/tools/bin/arm-linux-gcc -L.' /compat/linux/opt/Embedix/tools/bin/arm-linux-gcc -L. -c -g -O2 -I. -I. -D_PATH_TCSHELL='"/usr/local/bin/tcsh"' tc.defs.c 中略 /compat/linux/opt/Embedix/tools/bin/arm-linux-gcc -L. -c -g -O2 -I. -I. -D_PATH_TCSHELL='"/usr/local/bin/tcsh"' tc.prompt.c tc.prompt.c: In function `tprintf': tc.prompt.c:198: warning: initialization makes pointer from integer without a cast tc.prompt.c:257: dereferencing pointer to incomplete type 中略 tc.prompt.c:493: dereferencing pointer to incomplete type *** Error code 1 Stop in /tmp/tcsh.tc.prompt.cのコンパイルでエラーになります。 これは、struct tmの型宣言ができていないことが原因なので、 tc.prompt.cの先頭に「#include <time.h>」を追加します。
% mv tc.prompt.c tc.prompt.c.orig; (echo '#include同様のエラーがtc.sched.cのコンパイルでも発生するので、 tc.sched.cの先頭にも「#include <time.h>」を追加します。' ; cat tc.prompt.c.orig ) > tc.prompt.c % make 'CC=/compat/linux/opt/Embedix/tools/bin/arm-linux-gcc -L.'
% mv tc.sched.c tc.sched.c.orig ; ( echo '#includeこれでなんとかtcshをコンパイルできました。 無事に動くんでしょうか?(笑)' ; cat tc.sched.c.orig ) > tc.sched.c % make 'CC=/compat/linux/opt/Embedix/tools/bin/arm-linux-gcc -L.'
ちなみに実行形式 (tcsh-6.10) は ここ (tcsh-bin-slzaurus.tgz) です。
tcsh-6.12の実行形式は Zaurus with Linuxからダウンロードしてください。