ここまでで、お好みならば終了することが可能です。ELF 形式のプログラ ムをコンパイルして動かすために必要な環境は全てインストールできました。
「美意識」的な観点やメモリ使用量を最小化するためには、お使いのプログラ ムを全て ELF 形式でコンパイルし直したくなるかも知れません。ELF 形式で の再コンパイルはほとんどのエンドユーザー用のアプリケーションではごく簡 単です。しかしながら、動作環境について何らかの前提のあるプログラムもい くつかあり、それらは以下のような理由でエラーになるかも知れません。
_
(アンダスコア) が頭に付いていますが、ELF の実行形
式ではそうなっていません。これは、手書きのアセンブラコードを組みこまな
い限り問題にはなりません。_foo
の形のラベルを全て
foo
に翻訳してやるか、(移植性を高めたければ)
EXTERNAL(foo)
のようなマクロを用意して、(__ELF__
が
定義されていればそのまま変数を返し、定義されていなければ _
を
付けるようにするのがいいでしょう。
とにかく、以下に 2 つのリストを示します。最初のリストは既に ELF 形式の バージョンが作成されているもの(すなわち、ELF 形式でコンパイルするには 新しいバージョンを入手すればいいもの)で、2 つめのリストは第三者からの パッチが必要なプログラムです。
src/s/linux.h
の先頭付近に #define TERMINFO
の一行を
加えないと、正しく構築されないことがあります。これは 19.31 では必要な
いですが、XEmacs 19.13 には必要です。次のバージョン、19.14 では間違い
なく修正されることでしょう。
make config
)の時に以下の 2 つの項目に `yes' と答え
てください(これは 1.3 でも同じです)。1.2 をまだ使っている場合、次のリ
ストに示すパッチを入手してください。
Kernel support for ELF binaries (CONFIG_BINFMT_ELF) [Y/m/n/?]
Compile kernel as ELF - if your GCC is ELF-GCC (CONFIG_KERNEL_ELF) [Y/n/?]
cal
プログラムは
動きません。tsx-11 にある
version 2.5以降のバージョンを使ってください。
libXpm.so.4.5
が見付からない、というエラーになります。最後の
バージョン番号(.5
)が余計なので、単純な修正方法は、emacs など
のバイナリファイルを操作できるエディタで直接修正してしまうことでしょう。
libXpm.so.4.5^@
という文字列を探して(ここで ^@
は
NUL キャラクタ --- ASCII の 0 ---です)、.5
を削除し、ファイル
名の長さが変らないように、注意深く NUL キャラクタの後に 2 つのスペース
を追加しましょう。
make-3.74
GNU の ftp サイトにあるソースコードを入手して libc-5.3.12 のリリースノー
トにあるパッチをあてるか、tsx-11
から make-3.74.gz
のバイナリを入手してください。GNU の make には新しい ELF 版の libc バー
ジョンでのみ露呈するバグがあります -- このバグは、実際には古い GNU の
libc にあったバグに依存した実装になっているせいで、その libc のバグは
つい最近までの Linux の libc にもありました。そのため、古い a.out 版の
make
プログラムを使っている場合は動作しますが、新しい ELF 用
にはパッチが必要です。
GNU Make の開発者たちもこのバグには気付いていて、将来のバージョンでは
修正されるはずです。
cd /usr/src/linux
し、以下のパッチを切り出して patch -
p1
であててください。以下のパッチを見ながら Makefile を手動で修正
してもかまいません。以下のパッチファイルは簡単に理解できるでしょう
(-
で始まる行を削除して +
で始まっている行を追加しま
す)
diff -u linux-1.2.13/Makefile.orig linux/Makefile
--- linux-1.2.13/Makefile.orig Wed Aug 16 20:53:26 1995
+++ linux/Makefile Fri Dec 8 16:19:49 1995
@@ -12,9 +12,9 @@
TOPDIR := $(shell if [ "$$PWD" != "" ]; then echo $$PWD; else pwd; fi)
-AS =as
-LD =ld
-HOSTCC =gcc -I$(TOPDIR)/include
-CC =gcc -D__KERNEL__ -I$(TOPDIR)/include
+AS =/usr/i486-linuxaout/bin/as
+LD =ld -m i386linux
+HOSTCC =gcc -b i486-linuxaout -I$(TOPDIR)/include
+CC =gcc -b i486-linuxaout -D__KERNEL__ -I$(TOPDIR)/include
MAKE =make
CPP =$(CC) -E
AR =ar
あるいは、
asm/io.h
には gcc 2.7.2 でのみ露呈するバ
グがあり、修正するためのパッチは
ftp://ftp.uk.linux.org/pub/Linux/libc/misc/io.h にあります。