初版: 2003/01/20
最終更新日:
2003/01/20
まず、ソース一式 (ne-3.05.tar.gz) を ベクターから落としてきます。 これを適当なディレクトリで展開します。
ソースの展開は以下のようにしました。
% tar xzvf ne-3.05.tar.gz % cd ne次にドキュメントを熟読します。
% more INSTALL.jpコンパイルの手順は、標準的な「configure&make」方式のようです。 とりあえずは、「FreeBSD向けに」コンパイルしてみました。
% ./configure % makeさて、コンパイルの様子をながめていると、
略 gcc -O -pipe -o sh_make sh_make.c 略 ../lib/sh_make >sh_defs.h 略のように、 コンパイルしたプログラムを使って 動的に定義ファイルを生成していることがわかりました。 このままでは、安易にクロスコンパイラでコンパイルすることはできません。
そこで、「sh_defs.h」を生成するための「sh_make」は FreeBSD向けのバイナリとしてコンパイルし、 それ以外はSLザウルス向けとすることとします。
まず、libディレクトリのファイルをコンパイルします。
% cd lib % make clean % % make CC=/compat/linux/opt/Embedix/tools/bin/arm-linux-gcc /compat/linux/opt/Embedix/tools/bin/arm-linux-gcc -O -pipe -c misc.c 中略 /compat/linux/opt/Embedix/tools/bin/arm-linux-gcc -O -pipe -c term.c term.c:78: termcap.h: No such file or directory「termcap.hがない」というエラーが出ます。
% find /compat/linux/opt -name '*termcap*' -printで探しても、クロスコンパイラには含まれていないようです。 とりあえず、FreeBSD用のtermcap.hをコピーしてコンパイルしなおします。
% cp /usr/include/termcap.h . % make 'CC=/compat/linux/opt/Embedix/tools/bin/arm-linux-gcc -I.' /compat/linux/opt/Embedix/tools/bin/arm-linux-gcc -I. -O -pipe -c misc.c 中略 /compat/linux/opt/Embedix/tools/bin/arm-linux-gcc -I. -O -pipe -c tparm.c ar cr libele.a misc.o generic.o hash.o regexp.o term.o term_inkey.o tparm.o /compat/linux/opt/Embedix/tools/bin/arm-linux-gcc -I. -O -pipe -o sh_make sh_make.cなんとなくコンパイルが終了しました。 ここで、「SLザウルス向け」にコンパイルされた「sh_make」を消して、 「FreeBSD向け」のを作りなおします。
% rm -f sh_make % make sh_make gcc -O -pipe -o sh_make sh_make.c次に、srcディレクトリのファイルをコンパイルします。 ここでも、termcap.hをコピーしてからコンパイルします。
% cd ../src % cp /usr/include/termcap.h . % make 'CC=/compat/linux/opt/Embedix/tools/bin/arm-linux-gcc -I.' /compat/linux/opt/Embedix/tools/bin/arm-linux-gcc -I. -O -pipe -c block.c 中略 /compat/linux/opt/Embedix/tools/bin/arm-linux-gcc -I. -O -pipe -c sh_shells.c /compat/linux/opt/Embedix/tools/bin/arm-linux-gcc -I. -L../lib -o ne block.o crt.o cursor.o disp.o file.o filer.o hearderr.o input.o iskanji.o keyf.o line.o lineedit.o list.o menu.o profile.o search.o setopt.o keys.o ne.o sh_shells.o -lele -ltermcap ../lib/libele.a: could not read symbols: Archive has no index; run ranlib to add one collect2: ld returned 1 exit status *** Error code 1 Stop in /tmp/ne/src.さきほど作ったlibディレクトリのアーカイブで 「ranlibしてへんで」というエラーが出ています。 そこで、
% /compat/linux/opt/Embedix/tools/bin/arm-linux-ranlib ../lib/libele.aしてからメイクすると、今度は
/opt/Embedix/tools/arm-linux/bin/ld: cannot find -ltermcapのように「termcapライブラリがあれへん」というエラーになります。 これは、SLザウルスのlibtermcap.so (/usr/lib/libtermcap.so, 実体は libncurses.so.4.2) をカレントディレクトリにコピーして解決することにします。
コピーしてから「-L.」をつけてメイクするとできあがりです。
% make 'CC=/compat/linux/opt/Embedix/tools/bin/arm-linux-gcc -I. -L.' /compat/linux/opt/Embedix/tools/bin/arm-linux-gcc -I. -L. -L../lib -o ne block.o crt.o cursor.o disp.o file.o filer.o hearderr.o input.o iskanji.o keyf.o line.o lineedit.o list.o menu.o profile.o search.o setopt.o keys.o ne.o sh_shells.o -lele -ltermcap profile.o: In function `profile_write': profile.o(.text+0x20c): the use of `mktemp' is dangerous, better use `mkstemp'ちなみに実行形式は ここ (ne305-bin-slzaurus.tgz) です。