Network Users' Group ``wheel'' / Dai ISHIJIMA's Page / SL Zaurus関連 /
ne-3.05のコンパイル

初版: 2003/01/20
最終更新日: 2003/01/20


SLザウルス向けソフトをFreeBSDでコンパイル
〜 ne-3.05 〜



◎ne-3.05のコンパイル

UNIX系OSで動くエディタでは、vi互換やemacs互換のものが多いですが、 これ以外にも、 WordStar、あるいはVzエディタ互換のものにも根強い人気があります。 その中で、SLザウルスでも動きそうですよと教えてもらったのが、 Vz系の軽快なテキストエディタ 「ne」 です。

まず、ソース一式 (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) です。