雑記帳
ここはhideyosiの雑記帳です。テケトーに書き散らしてるだけなので間違っていたりとは普通にしてます。信用度は相当低いことをあらかじめご了承を。またご覧のようにWikiを使ってますが、hideyosi意外は書き込めません。
ちょっと脱線の企画・・・(^^;
ページ内コンテンツ
バージョン
- せっかくなので、安定版の最新版5.5をまっさらにで導入してみよー!
- XはXorgを導入。
- とにかくqemuを導入。これはportsにあった。
ちょっと思ったこと。FreeBSDはかつて、Linuxに比べてドキュメントが豊富でまとまっているというのがウリだったと思う。しかし、ひさしぶりにインストールした5.5にはそれはもはや当てはまらないと思う。ports等の使い方や規格が沢山あり、かつ、それらがまったく順を追っていないのだ。つまりシロウトが検索を頼りに文章を読んでいくと、余計な混乱や致命的な失敗を犯すおそれがあると感じた。(もちろん、たまたまここ一年くらいが過渡期なのかもしれないが)
- さて、qemuを導入できた。ちゃんと動くかどうか、とにもかくにもはりぼての最終版を当てて起動してみよう!
- あっさりOK。つまり、qemuはOKというわけだ!
tolset
さて、それではtolset。こいつらがちゃんと動いてくれるか? ダメなら移植作業がいるよね?
・・・ま、どっちみちメイクが通らないことにはどうしようもないわけで、とにもかくにもまず、メイクを全ツールで通そうじゃないか。
たぶん完了〜。
まだまだ!
go_0023
- ふむふむ〜。まずはrules.makの調整からだね。ええと、FreeBSDでうまくいくかな???
- まず、include内のrules.makをrules.mak.orgに変名してとっておく。
- おなじinclude内のrules.gccをrules.makにコピー。こっちを雛形にしていこう。
- ・・・おぉっとぉ! 待った待った! golibやらnaskやら、細かいのを先に作っておかないといけないみたいだなぁ。これ。
gcc
- ここも単独でコンパイルできないものかなぁ・・・
- Makefileを見ると、ここでは cpp0、cc1、cc1plus を生成するみたい。
- たとえばまず、cpp0.exeだけ作れないものか・・・
- とにもかくにも、cppmain.o intl.o libcpp.lib hashtable.o version.o が必要みたいだ。これらを単独でコンパイルしてみよう・・・
- だめだ・・・。猛烈なエラーを吐いて停止した・・・
toolstdc
- stdcは多分、できるだけWin32の機能に依存しないようにつくられたバージョン。なので、コイツから作る。
- toolstdcに降りてメイク。当然エラーがでる。(^^ さーて・・・
- くっそぉ! なんでだろう? nasklibがコンパイルできない。
../toolstdc/golib00 out:nasklib.lib ll.o ll_lib.o nask.o unknown file type: ll.o
- なんだろう。これ? もしかして、ll.oの形式が問題なのかな???
- たしか、.oって「オブジェクトファイル」と言われ、最終コンパイルの前の中間ファイルだったよなぁ。
- 外で宣言されている関数とかそういうのを後回し(未コンパイル?)にし、また、他のobj等のファイルとくっつけるための「のりしろ」を持っている中間ファイル。
- これをライブラリアンであるgolib00でまとめているはずなんだけど、そのgolib00がunknounを吐く。
gcc -c -Os -DIN_GCC -DHAVE_CONFIG_H -I../include -o ll.o ll.c gcc -c -Os -DIN_GCC -DHAVE_CONFIG_H -I../include -o ll_lib.o ll_lib.c gcc -c -Os -DIN_GCC -DHAVE_CONFIG_H -I../include -o nask.o nask.c
- FreeBSD上では、各.cファイルはこんなオプションで.o形式にされている。これらのオプションに問題があるのかな???
- ・・・おそらくnaskが「BINとCOFF(実際はwin32-COFF)」しか吐けないことを考えると、golib00もこれらしか扱えないのではないかと予測。さらに、普通のGCCはたぶんELFとかa.out形式が標準のはず。たぶんこれのズレではないだろうか?
- まいったなぁ。.oファイルの形式を調査したりする方法やGCCで他の形式のオブジェクトファイルを吐き出す方法がわからない・・・どうすれがえぇんだろ??
- おぉぉ! 形式を判定できるぞ! UNIX系では、 「file」というコマンドでできるのか!よし!!さっそく!
$> file ./ll.o ./ll.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (FreeBSD), not stripped
- おぉ!出た!ふむふむ! 間違いなくELF形式だということは解ったぞ!
- まてよぉ??。gccって、コンパイルする段階でCOFFとかのサポートを持たせたりはずしたりできるのか?もしかして?。
- しかも、なんだかFreeBSDのパッケージで用意されているgcc3.4は、そのスイッチがはずされている(つまりCOFFとかをサポートしていない)ってことなのか??
- もしそうなら、gccを自分で再コンパイルすればWinCOFF形式の.oを作れるってことかな???
- ちょっと実験。とりあえず現在の状態でもライブラリアンそのものはあり、動く。arコマンドがそうだ。ちょっと試しにarを使ってnasklib.libを作ってみよう。
gcc -c -o ll.o ll.c gcc -c -o ll_lib.o ll_lib.c gcc -c -o nask.o nask.c ar rcs nasklib.lib ll.o ll_lib.o nask.o
- これで、とにもかくにもnasklib.libは出来上がった。・・・たぶんこれじゃダメだろうけどね。
- さて問題。で、出来上がったnasklib.libがなぜダメで、どうなっていればいいのか?。さっそく調査・・・
- ・・・っていうか、もしかして勘違いかな???。だって、ここの処理はそもそも、nask.exeを作るためのもの。今回はFreeBSD上で動作する実行ファイルを作りたいわけでしょ?。そのためにnasklib.libやgo_lib.libを作るわけでしょ? だとすると、そもそもこれらlibがCOFFである必要性ってあるのかな???
- そんなわけで、いずれにしてもnask.exeの作成には nasklib.lig と go_lib.lib 、stiin.libが必要だよね。まずはそっちから手をつけてみよう。
go_lib
- ふむ・・・ここにはズラーっと.cファイルがあるな。よし。とりあえず、ぜーんぶ gcc -c xxx.o xxx.c のパターンでコンパイル・・・
- あっちゃぁ〜。またエラーが!
abort.c: In function `GO_abort': abort.c:7: error: `GO_TERM_ABORT' undeclared (first use in this function) abort.c:7: error: (Each undeclared identifier is reported only once abort.c:7: error: for each function it appears in.)
- やっと突き止めた。なぜかabort.c内ではまったく宣言されていない定数 GO_TERM_ABORT が使われている。
- じゃあどこかっていうと、 ../include/go_lib.h内じゃん。じゃあ、#include "../include/go_lib.h"を追加と・・・
- できたー!
- 別件が発生。
gcc -c -o vfprintf.o vfprintf.c vfprintf.c:9: error: syntax error before '*' token vfprintf.c: In function `GO_vfprintf': vfprintf.c:14: error: `format' undeclared (first use in this function) vfprintf.c:14: error: (Each undeclared identifier is reported only once vfprintf.c:14: error: for each function it appears in.) vfprintf.c:14: error: `arg' undeclared (first use in this function) vfprintf.c:15: error: `stream' undeclared (first use in this function)
- むむむむ・・・どこが間違いなんだろう? まさか、askaの時に出る型キャストの関係か!?
vfprintf.cの9行目 int GO_vfprintf(GO_FILE *stream, const char *format, va_list arg)
obj2bi4c
- これはaskaがいるらしい。後で・・・
- ふむ・・・ここはMakefileがあまりシャキンとしてないや。com_mak.txtを見てと・・・
- ええと、.askファイルのコンパイル方法は
- *.askを cpp0.exe -P -I$(INCPATH) を使って*.iasにする。
- *.iasを、 ASKA を使って*.3asにする。
- *.3asを、 naskcnv0.exe -l -s -w を使って*.nasにする。
- *.nasを、 nask.exe を使って*.objファイルにする。
- とまあ、こういう流れになるわけか。
- cpp0かぁ。これ、なにするコマンドだっけ? gccだとええと・・・
最終更新: 2024-01-06 (土) 22:39:10 (JST) (103d) by