binutilsとgccのインストールがやっとできた。

実施する作業は同じでも、場合場合で出てくるメッセージの内容が違うので、環境構築って大変。

恐らく筆者の坂井さんはCygwin環境で実施すると複雑度が1つ増えて問題解決の道のりが複雑になることを把握されているのかもしれない。Cygwin環境の開発はお薦めしていなさそう。


[教訓]
①本で記述されているバージョンを使用する。
②筆者がお薦めしていないCygwinがらみで問題が起きたらCygwinを再インストールする。
③天の声は貴重だ。


[作業内容]
①binutilsをインストールする

1.Makefileを作成する。
./configure --target=h8300-elf --disable-nls --disable-werror

2.makeを実施する。
make

エラーが出てくる。

make[4]: *** [size.exe] Error 1
make[4]: Leaving directory `/tmp/binutils-2.21/binutils'
make[3]: *** [all-recursive] Error 1
make[3]: Leaving directory `/tmp/binutils-2.21/binutils'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/tmp/binutils-2.21/binutils'
make[1]: *** [all-binutils] Error 2
make[1]: Leaving directory `/tmp/binutils-2.21'
make: *** [all] Error 2

これを解決するために次に取った対策はバージョンを変更してみることだった。
本で紹介されていたbinutils-2.19.1を使用した。
そしたら旨く行った。

他にもいろいろエラーが出て、1つ1つ記憶していないが、CD-ROMのCygwinを再インストールすることでなぜか知らないがエラーがなくなった。

3.インストールする。
make install
うまくいった。


H8のCD-ROMで作成したCygwin環境だとbinutils-2.21はmakeできないことがわかった(経験上だが)。より新しいバージョンのbinutilsを扱おうと思ったのだが、無理。。



②gccのインストール

1.Makefileを作成する。結果OK。
./configure --target=h8300-elf --disable-nls --disable-threads --disable-werror --disable-shared --enable-languages=c --disable-werror

2.makeを実施する。結果OK。
make

3.インストールする。結果NG。
make install

ここでダメ、以下の様なエラーが出てくる。
/usr/bin/install: permission denied
make[1]: *** [install-common] Error 1
make[1]: Leaving directory `/tmp/gcc-3.4.6/gcc'
make: *** [install-gcc] Error 2

/usr/bin/installのパーミッションが駄目だというのでのぞいてみるが
-rwxr-xr-x で問題なさげ。

ググってみるがどうも解決方法が分からない。
ということでkatata氏の天の声をGET。
問題解決観点としてkatata氏が提案したのは、binutilsがなぜmake install成功したかという観点だった。

binutilsのMakefileのINSTALLという変数に注目すると以下の記載。
INSTALL = /tmp/binutils-2.19.1/install-sh -c

一方、gccのMakefileのINSTALLを注目すると以下。
INSTALL = /usr/bin/install -c

gccはエラーで使えないというのだからbinutilsで使用しているのを採用してみればということで試してみる。
gccのMakefileのINSTALLを以下のように書き換えた。
INSTALL = /tmp/binutils-2.19.1/install-sh -c

make installしたら大成功。


早速ELFファイルが作成可能かの確認を実施。
readelf -a kzload.elf

ちゃんとelf形式になっている。

OS自作してみる。-gccinstall

やっと終わった、、かもしれない。
AD

コメント(2)