雑記帳
ここはhideyosiの雑記帳です。テケトーに書き散らしてるだけなので間違っていたりとは普通にしてます。信用度は相当低いことをあらかじめご了承を。またご覧のようにWikiを使ってますが、hideyosi意外は書き込めません。

ちょっと脱線の企画・・・(^^;

バージョン anchor.png Edit

  • せっかくなので、安定版の最新版5.5をまっさらにで導入してみよー!
  • XはXorgを導入。
  • とにかくqemuを導入。これはportsにあった。

ちょっと思ったこと。FreeBSDはかつて、Linuxに比べてドキュメントが豊富でまとまっているというのがウリだったと思う。しかし、ひさしぶりにインストールした5.5にはそれはもはや当てはまらないと思う。ports等の使い方や規格が沢山あり、かつ、それらがまったく順を追っていないのだ。つまりシロウトが検索を頼りに文章を読んでいくと、余計な混乱や致命的な失敗を犯すおそれがあると感じた。(もちろん、たまたまここ一年くらいが過渡期なのかもしれないが)

  • さて、qemuを導入できた。ちゃんと動くかどうか、とにもかくにもはりぼての最終版を当てて起動してみよう!
  • あっさりOK。つまり、qemuはOKというわけだ!
Page Top

tolset anchor.png Edit

さて、それではtolset。こいつらがちゃんと動いてくれるか? ダメなら移植作業がいるよね?
・・・ま、どっちみちメイクが通らないことにはどうしようもないわけで、とにもかくにもまず、メイクを全ツールで通そうじゃないか。

たぶん完了〜。

まだまだ!

Page Top

doscmd01 anchor.png Edit

こいつはいろいろとtolsetがいる。他のヤツが完成してからでないとなぁ・・・

Page Top

edimg anchor.png Edit

むむ? ライブラリがあるぞ???

Page Top

go_0023 anchor.png Edit

  • ふむふむ〜。まずはrules.makの調整からだね。ええと、FreeBSDでうまくいくかな???
  • まず、include内のrules.makをrules.mak.orgに変名してとっておく。
  • おなじinclude内のrules.gccをrules.makにコピー。こっちを雛形にしていこう。
  • ・・・おぉっとぉ! 待った待った! golibやらnaskやら、細かいのを先に作っておかないといけないみたいだなぁ。これ。
Page Top

gcc anchor.png Edit

  • ここも単独でコンパイルできないものかなぁ・・・
  • Makefileを見ると、ここでは cpp0、cc1、cc1plus を生成するみたい。
  • たとえばまず、cpp0.exeだけ作れないものか・・・
  • とにもかくにも、cppmain.o intl.o libcpp.lib hashtable.o version.o が必要みたいだ。これらを単独でコンパイルしてみよう・・・
  • だめだ・・・。猛烈なエラーを吐いて停止した・・・
Page Top

toolstdc anchor.png Edit

  • 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が必要だよね。まずはそっちから手をつけてみよう。
Page Top

go_lib anchor.png Edit

  • ふむ・・・ここにはズラーっと.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)
Page Top

imgtol0d anchor.png Edit

Page Top

osalink1 anchor.png Edit

Page Top

sartol0j anchor.png Edit

  • ???。それに、sargow32.libって・・・・
Page Top

hrblib0a anchor.png Edit

  • ???
Page Top

obj2bi4c anchor.png Edit

  • これは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だとええと・・・
Page Top

tk5lgpl1 anchor.png Edit

  • あれれ〜? これ、ソースってどれなのかな???

最終更新: 2024-01-06 (土) 22:39:10 (JST) (103d) by