[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[OSASK 1246] Libraries for lcc-win32.



  こんにちは、川合です。今日はいつもと違っていくつかメールを書き
ますが、それはそれぞれ要件が大きく異なるからです。

  現在社内では、lcc-win32のライブラリを作ろうという動きがありま
す。まあ、OSASK-ML上で出てこない程度の動きなので、まだ活発という
ほどのこともないですが。・・・ここの話は、そういうぐいぐい00用の
ライブラリーを作る際に役に立つかもしれない情報です。

  昨日の夜ieatta3がとりあえず形になったのですが、僕はFPUがちゃん
と使えているかどうかテストしたくなり、そういうアプリを1本書きま
した(test008)。で、コンパイルは素直に通ったのですが、リンクで
引っかかりました。エラーメッセージによると、「_ftol」が無いとの
ことです。

  僕は、このエラーでぴんときました。test008の中には、doubleの変
数からcharの変数に代入する部分があり、多分ここが関係しているのは
ないかと思ったのです。ftolなんて、doubleをlongに変換する関数名っ
ぽいですし。

  さて、どんな関数が必要なのかは分かったものの、ftolの正確な仕様
は僕にはさっぱりわかりません。だから、アセンブラで作りたくても作
れません。でも、ftolがないとテストプラグラムは実行できません。僕
は困りました。

  で、lcc-win32の本家のライブラリから持ってくるという方法を思い
付いたのです。そして、この方法はうまくいきました。

  まず、lcc-win32の本家のライブラリは、lcc-win32をインストールし
たディレクトリの中のlibというディレクトリにあります。ざっと100以
上のファイルがあり、かなり面食らいます。・・・最初にやらなければ
いけないのは、ftolが入っているライブラリファイルを特定することで
す。

  ライブラリファイルの中身を見るのには、lcclibを使います。lcclib
の使い方はbinディレクトリの中のwedit.hlpの「lcclib」という項目の
ところに詳しく書いてあります。しかし全部英語なので読みにくいとい
う方もおられるでしょう。ここでも必要なことだけを簡単に説明してお
きます。

  たとえば、libc.libの中身を見たいときは、

prompt>lcclib /list libc.lib

とします。・・・しかしまあ、これがやってみると長いんです。ってこ
とで、リダイレクトしてファイルに落とした方がいいでしょう。たとえ
ば、

prompt>lcclib /list libc.lib > libc.lst

のように。

  で、そのlibc.lstを覗いてみると、おお、「ftol.obj」なるファイル
が含まれているようです。そうと分かれば、リンク時のライブラリ指定
にlibc.libを追加すればいいだけのことです。

  でも、待って下さい。今回はそれでいいかもしれません。しかし、li
bc.libの中には不要なものも多く含まれています。これは不要であるだ
けでなく、将来我々のライブラリが充実してきたら、関数名が衝突して
じゃまになるかもしれません。ということで、このライブラリからftol
objだけを取り出す方法も紹介しておきます。・・・といっても簡単で
、

prompt>lcclib /extract:ftol.obj libc.lib

とやるだけです。で、ひとたび.objファイルが手に入れば、

prompt>lcclib /out:newlib.lib a.obj b.obj ...

という風に、ライブラリを自分で作ることができます。

  ちなみに、

prompt>lcclib /extract libc.lib

とやるとlibc.lib内の全ての.objファイルが展開されます。・・・これ
を利用して、guigui00.libとstdlib.libの.objファイルを全て取得し、
全部ひとまとめにしたライブラリを作る事も可能でしょう。そうすれば
link32で指定しなければいけないライブラリの数が減って便利かもしれ
ません(笑)。

  さて、今回はlibc.libからftol.objを持ってきて使って成功しました
が、この方法がどの関数にも使えるわけではないということには注意し
て下さい。ftolは、OSに依存しないような関数だったから成功したので
す。

  まあ、自分で書いた方がライセンス上の問題も少ないですしチューニ
ングもできるのですが、面倒なときはこんな方法もありますよ、ってい
う話でした。

  それでは。

--
    川合 秀実(KAWAI Hidemi)
川合堂社長 / OSASK計画総指揮 / カーネル開発班
E-mail:kawai !Atmark! imasy.or.jp
Homepage http://www.imasy.or.jp/~kawai/