bind の余分な拡張機能2007年08月10日 12時46分33秒

UNIX では C プログラムをコンパイルして、リンカーでリンクする。VOS の世界では、リンクすることをバインドするという。その為、プログラムも bind だ。呼び方が違うだけで、実質的には同じことだ。

VOS C にはライブラリという概念が存在しない。gcc も移植され、OpenVOS といった、GNU 環境では静的ライブラリは動くようだが、動的ライブラリは無いみたいだ。

それ故の拡張だろう。bind はプログラムをリンクして、名前を解決できない関数を、ファイル名を元に探しにいく。例えば、memset が使われているが、指定されたオブジェクトの中に存在しないときだ。そこで、memset.obj というファイルを探して、取り込むのだ。C 言語のライブラリ関数はすべてこれに当たる。この様な拡張が無ければ、Hello world! のプログラムさえも作るのが大変になる。printf を持つオブジェクトファイルを知っている必要があり、また、printf の依存関係も知らなくてはファイルの指定も出来ない。

必要悪ではあるのだろう。しかし、この機能が意図しない同名の関数の実装を勝手に取り込み、異常な動作を起こすのだ。何種類かの事象はあったが、結局は意図しない関数を取り込んだことが原因で、不明な動作を起こすことが多々ある。

そこで、回避策として考えたのが、業とオブジェクトパスを設定せずに、相対または絶対パスで指定をすることだ。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2007/08/10/1715713/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。