From: Hiroshi IGARASHI Date: 2002-11-10T19:12:09+09:00 Subject: [ruby-dev:18732] reference to symbols in other ext. libraries いがらしです。 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)