提案/クロスコンパイル/01.Linuxでコンパイルしてみた


Top / 提案 / クロスコンパイル / 01.Linuxでコンパイルしてみた

Linuxでビルドしてみる by ひらっち

なんか、前にビルドを試みたときの記憶が曖昧なので、もう一度やってみる。 同時にそのとき思ったことなんかもメモしいく。 一個上の文章はおかしなこと言ってるんで、後で消す。

MONA/ $ make
cd config && ./configure && make && make install
Please set MONADIR!

MONADIR環境変数を設定しないといけないらいしい。 これはconfigureスクリプトで使われているようだ。 autotoolっぽい名前だけど、関係はない。 MONADIRは、MonaOSや、Mona用プログラムをコンパイルするために必要な ツールや、インクルードファイル、設定ファイルなどを置いておく場所のようだ。

ソースツリーと別の場所にMONADIRを設定するように考えられているようだが、 これは混乱の原因にならないか。 例えば、LinuxではソースツリーのトップにMakefile用のインクルードファイルを 配置して、カーネル外モジュールをコンパイルするときには、このソースツリーの ある場所を指定するようになってたはず。/usr/src/linux とか /lib/modules/`uname -r`/build とか。

MINGWPREFIX環境変数を設定すれば、Mingw32を使ってコンパイルしてくれる設定が まだ残ってるので、これを使ってみる。

MONA/ $ MONADIR=~/local/mona MINGWPREFIX=/usr/bin/i586-mingw32msvc- make

Debianではmingw32をインストールすると、/usr/bin/i586-mingw32msvc-xxx という コマンドが使えるようになる(xxxにはgccとかldとかが入る)。 なのでプリフィックスは上のようになる。

confiugre スクリプトあるのに、毎回環境変数設定して make しなきゃいけないの?

bim2bin

前回もここでハマった。 Windowsでコンパイルしてみると、あっさりコンパイルが通ってる。 ちなみにLinux上だと以下のような感じ。

MONA/tool/bim2bin/ $ MONADIR=... make
gcc -Wall  -idirafter . -o bim2bin bim2bin.c
bim2bin.c: In function 'main':
bim2bin.c:174: warning: pointer targets in initialization differ in signedness
bim2bin.c:200: warning: pointer targets in initialization differ in signedness
bim2bin.c:201: warning: pointer targets in passing argument 1 of 'strncmp' differ in signedness
(以下、怒涛のごとくエラーと警告)

で、今回ちょっと思いついて、こんなことしてみた。

MONA/tool/bim2bin/ $ MONADIR=... make CC=gcc-3.3
gcc-3.3 -Wall  -idirafter . -o bim2bin bim2bin.c

……通ったよ。前回、ここでかなり苦労して結局後回しにしたんですけどね!(怒)

結局、gcc 4.x で通らないソースだったようです。 詳しくは検討してないけど、このソースの方がC言語の仕様上間違ってるっぽい。 見た感じ、汚ないソースだし、多分メンテする人もいないでしょう。 バイナリのサイズを切り詰めるためのツールのようですが、 CD-ROMイメージが使えるようになって問題も無くなったでしょうから、 このツールを使うのは廃止の方向で行った方がいいのではないでしょうか。

これに関しては、手動でインストールして、トップディレクトリのMakefileから コメントアウトしてこっちのmakeに入らないようにしてから先に進む。

他のtoolに関しても、makeは通るもののmake installが通らない。 tool の configure をトップの Makefile で行っているので、オプションを指定 できず、/usr/local 以下にインストールしようとしてるみたいだ。 これに関しても手動でインストールして、コメントアウトで先に進む。

.Net

ブートローダにC#が使われている。Monoを入れればなんとかなるかな。

Debian なので、 apt-get install mono-mcs で、コンパイラと、その実行に必要な 他のパッケージをまとめてインストールできる。

MONA/core/PEAnalizerLib/Makefile.inc に、monoでコンパイルするための設定が 残ってた。Windows用の定義をコメントアウトして、mono用の定義を有効にする。

NASM = nasm

## for Microsoft .NET
#CSC   = "$(WINDIR)/Microsoft.NET/Framework/v1.1.4322/csc"
#SEP   = ??

## for mono
CSC   = mcs
SEP   = /
NETRT = mono

これで、.Net関係はビルドが通った。(多分

カーネル

ビルドはカーネルに入った。 今度は MemoryAllocator.cpp のコンパイルでコケた。 mingwのバージョンは 3.4.5 なので、Cygwin とそんなに違うわけでもなさそうだが。

エラーメッセージupしときます。

多分、MemoryAllocator.cpp:21(ONLY_MSPACESとかを定義してあるあたり)に、以下を 加えることで解決する。

#ifdef WIN32
#undef WIN32
#endif
#ifdef _WIN32
#undef _WIN32
#endif

これで少し警告は残るが、先に進めることができるようになる。

MONA/core/monapi/monapi_impl.cpp でも同じ内容のエラーが出るので、上と同じ 修正をする。

……何度も make して思ったんだが、同じオブジェクトファイルとか何度も コンパイルしてる。makeはファイルの更新時刻を見て、必要のないコンパイル は自動的にスルーしてくれるんだが、書きかたがマズいんじゃないかな。

今度は、IDEDriver.h でエラー。

fat_write関係のヘッダが見つからないと怒られる。 fat_writeを実行ファイルだけコピーしていたからみたいだ。 MONA/tool/fat_write/ に cd して、 make install-data とすると、ヘッダファイル が MONADIR/include/fat_write/ にインストールされたみたいだ。 これもソースツリーの外に環境を作る必要はないんじゃないか。 MONA/include/ みたいなディレクトリを作って、最初からそっちにヘッダファイルを 置いておけば、ファイルのコピーなどすることも無くなるだろう。

次は、IDEDriver.cpp からインクルードしてる Assert.h が無いと言われる。 これは monapi/Assert.h にある。 なんで、``monapi/''が抜けてるんだろう。

IDEDriver.cpp では、Assert.h で定義されているマクロ等は使ってないみたいだ。 つまり、昔使ってたinclude行がたまたま残ってて、それが環境によってはデフォルト のインクルードディレクトリにあるAssert.hをインクルードしてるっていう形に なってるんじゃないだろうか。 とりあえずinclude行削除。

そうすると、お、最後までコンパイル通った。 MONA/tool/mkimg/mona.iso に CD-ROM イメージができてる。

$ qeumu -cdrom mona.iso

#ref(): File not found: "クロスコンパイルscreenshot.png" at page "提案"

キタ!

シェルが立ち上がらないのは、別にコンパイルする必要があるってことかな?

どうやら、MONITOR.CFG の改行コードの問題のようんだ。 せっかくなので、Monitor のコードをいじって、どの改行コードにも対応するように しよう。実際にいじるのは、MonAPI::CString。splitの代わりにsplit_lines関数を 作って、Monitor からはそれを呼ぶように変える。

これを書くとき、split_lines関数が宣言されていないというエラーに悩まされる。 これは CString.h が、MONADIR/include 以下にコピーされたものをインクルードして いたため。コピー元のヘッダファイルをいじってもコピー先には反映されないらしい。

このあたりも、開発の敷居を上げていると思われ。

screenshot2.png

split_lines についてはテストしてから commit しますです。

コメント

コメントはありません。 コメント/提案/クロスコンパイル/01.Linuxでコンパイルしてみた?

お名前:

MENU

now: 3

リンク


最新の20件
2017-09-29 2017-04-25 2017-01-10 2016-12-11 2016-12-09 2016-10-04 2016-08-14 2016-06-05 2016-05-29 2016-04-15 2015-12-28 2013-02-25 2013-02-21 2013-02-20 2013-02-12 2013-02-11 2013-02-10
最新の20件
2010-02-01 2010-01-31 2010-01-30 2010-01-29 2010-01-16

Counter: 5019, today: 1, yesterday: 0

リロード   新規 編集 凍結 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS

Last-modified: 2008-03-28 (金) 15:48:03 (3680d);  Modified by mona
PukiWiki 1.4.6 Copyright © 2001-2005 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-ji
Powered by PHP 5.2.17
HTML convert time to 0.052 sec.