いがらしです。

At Sun, 10 Nov 2002 01:34:56 +0900,
WATANABE Hirofumi wrote:
> 
> > > つまり(GCCかつ)GNU ldかつ--enable-sharedのときだけ
> > > -z defsか--no-undefinedを追加するという方向で。
> > 
> > これを追加すると、他の拡張ライブラリ中のシンボルを参照している
> > 拡張ライブラリのリンク時にもエラーになってしまいます。
> > # 具体的にはRuby/GNOME2で困っています。
> 
> と思ってextmk.rbで作るときだけにしたんですが、なんかいつのま
> にかmkmf.rbで作るときも有効になってますね。そっか、
> create_makefileをmkmf.rbへmergeしたときか。

配慮して下さってたんですね。

> それはそれとして、できれば他の拡張ライブラリのシンボルを参照
> しないで済む方法考えてください。今のところ移植性が失われます。
> 
> これを根本的に解決するにはEXTERNの仕組みを変更するとか結構面倒です。

そうですか。危ういやり方であるとは認識していましたが。
思いつく解決法は次の2つくらいですが、どうでしょうか?
「EXTERNの仕組み」というのを全然理解していないので、
解決法になってないのかもしれませんが。

* libruby(にある何らかの関数・変数)を介して明示的にシンボルを
  登録・検索できるようにする。例えば、ポインタを適当にラップ
  して、GCされないようにしたHashオブジェクトに突っ込むなど。
* 他の拡張ライブラリに見せる部分は独自のDLLにしてインストール。
  参照する側の拡張ライブラリではlibrubyに加えこのDLLもリンクする。
  リンク時にシンボル解決ができるのは嬉しいが、別DLLを作る方法が問題。

--
五十嵐  宏  (Hiroshi IGARASHI)