From: Katsuyuki Komatsu Date: 2000-09-19T16:14:29+09:00 Subject: [ruby-dev:10972] require socket and md5 小松です. drb-1.2.1を使っているときに出た問題なのですが,Ruby 1.6.0で Solaris 2.5.1だけsocketとmd5をこの順でrequireすると, MD5の値が間違っていたり毎回変わったりするという現象がおきていて, 悩んでいます. しかも同じバイナリをSolaris 2.6で動かすとOKで, 他のプラットフォームでは再現しません. コンパイラかと思って,gcc 2.8.1,egcs 1.1.2,gcc 2.95.2で"-g -O2"と "-g"を,WorkShop Compiler 4.2 (2世代前,最新は6.0) で"-g"と"-O"を 試してみましたが,毎回値が変化するかどうかが変わるぐらいで間違って いることは変わりありませんでした. Ruby 1.4.6でも同様でした. うーん,きっとSolarisのシェアードライブラリのローダーのバグ なんだろうな. しょうがないのでmd5をスタティックリンクして回避しています. 参考まで. □Solaris 2.5.1, egcs 1.1.2, -g -O2 % uname -mrs SunOS 5.5.1 sun4u % ruby-1.6.0 -v -rsocket -rmd5 -e '5.times { p MD5.new("0").hexdigest }' ruby 1.6.0 (2000-09-19) [sparc-solaris2.5.1] ← egcs 1.1.2で-g -O2で作成 "000001c0000000009bf3a3bb9b0a90a0" ← 値がおかしい上に毎回変わる "000003c00000000089042cb03434dbf5" "000005c0000000002fe81e55e2d8729b" "000007c0000000000b90924f87a0f3d9" "000009c000000000c0a253b7a1f11083" % ruby-1.6.0 -v -rsocket -rmd5 -e '5.times { p MD5.new("0").hexdigest }' ruby 1.6.0 (2000-09-19) [sparc-solaris2.5.1] "000001c0000000009bf3a3bb9b0a90a0" ← 同一マシンとバイナリでは1回目のRubyの "000003c00000000089042cb03434dbf5" 出力パターンと2回目のRubyの出力の "000005c0000000002fe81e55e2d8729b" パターンは同じ "000007c0000000000b90924f87a0f3d9" "000009c000000000c0a253b7a1f11083" % ruby-1.6.0 -v -rmd5 -rsocket -e '5.times { p MD5.new("0").hexdigest }' ruby 1.6.0 (2000-09-19) [sparc-solaris2.5.1] ← egcs 1.1.2で-g -O2で作成 "cfcd208495d565ef66e7dff9f98764da" ← -rmd5を先にもっていくと-rsocketが "cfcd208495d565ef66e7dff9f98764da" あっても正常 "cfcd208495d565ef66e7dff9f98764da" "cfcd208495d565ef66e7dff9f98764da" "cfcd208495d565ef66e7dff9f98764da" % □Solaris 2.6, egcs 1.1.2, -g -O2 % uname -mrs SunOS 5.6 sun4u % ruby-1.6.0 -v -rsocket -rmd5 -e '5.times { p MD5.new("0").hexdigest }' ruby 1.6.0 (2000-09-19) [sparc-solaris2.5.1] ← バイナリは上と同じもの "cfcd208495d565ef66e7dff9f98764da" ← Solaris 2.6では-rsocketが先に "cfcd208495d565ef66e7dff9f98764da" あっても正常 "cfcd208495d565ef66e7dff9f98764da" "cfcd208495d565ef66e7dff9f98764da" "cfcd208495d565ef66e7dff9f98764da" % -- 小松克行 / Katsuyuki Komatsu