Gauche > Archives > 2013/12/12

2013/12/12 05:40:05 UTCshiro
#
>(び) それはknownで、今やってるwrite.cの書き換えにより対策されるはず、です。
#
>enami cond-expandでチェックしてるのだけれど、ipv6がonになっててもAI_V4MAPPEDは定義されてないってことかな。
#
>mhayashi1220 あっしまった。export-symbolsはもう使ってなくて、常にRTLD_GLOBALになるようにある時点で変更したんです。でもなぜそうしたんだったかな…
2013/12/12 09:55:37 UTCmhayashi1120
#
えーと、実は今 openssl の libcrypto.so 内の関数を呼びだす小さな共有ライブラリを作ってて、その関数から SHA256_Init といった同 libcrypto.so 内の関数を呼び出すのですが、この関数が gauche の rfc--sha.so 内の関数名とかぶっているのです。
そうすると rfc--sha.so を RTLD_GLOBAL で dlopen していると libcrypto.so からも gauche の方の関数が見えてしまうようなのです。
C をあまりやったことないので四苦八苦してたのですが LD_DEBUG を設定した出力によるとそういう動作のように見えました。

外部の拡張を呼び出したときに、意識の外にある関数が上書きされちゃうのは意図できない動作だと思ったのですがどうでしょうか。
(それとも僕が c のお約束ごとを破って作っているとか…)

ちなみに手元の Debian で RTLD_GLOBAL -> RTLD_LOCAL に変えて gauche の trunk を make check したときは全部 pass しました。
2013/12/12 12:17:28 UTCshiro
#
確かにそれは嫌ですね。本来はRTLD_LOCALにすべきだと今は思うんですが、なんでGLOBALにしたんだっけな。確かプラットフォーム依存の何かだったと思うのだけれど。