From: "U.Nakamura" Date: 2006-03-12T13:55:42+09:00 Subject: [ruby-dev:28432] Re: -MT付きでのコンパイルについて on Win32 VC7 こんにちは、なかむら(う)です。 In message "[ruby-dev:28429] Re: -MT付きでのコンパイルについて on Win32 VC7" on Mar.11,2006 00:51:34, wrote: | 本体 → libcmt.lib でリンクされた実体を参照 | socket.so → msvcr71.dll 内の実体を参照 | | ということだと思うんですが。同じ名前の違うものを参照 | してしまっているのでつじつまが合わなくなっていると。 既に出てますけど、改めて補足すると、 * 普通にrubyを作った場合 ruby??-msvcr*.dll -> msvcr*.dll内のテーブル socket.so -> msvcr*.dll内のテーブル(上と共通) * msvcr*.dllを利用しなかった場合 ruby??-msvcr*.dll -> libcmt.lib内のテーブル socket.so -> libcmt.lib内のテーブル(上と物理的に別) ですね。 | [ruby-list:41895] にある「メモリマネージャの不一致」と | いうのは分かりませんけど。 malloc()・free()の管理情報のことですかね。 上の「テーブル」を読み替えれば同じことになります。 ruby本体側でmalloc()したメモリを拡張ライブラリ側でfree()する とか、その逆をしたりする時に困ったことが起きる、と。 実際には、malloc()そのもの、free()そのものは置き換えが発生し てruby本体側のものが使われるようになってるはずですが、ランタ イムの中でmalloc()・free()相当の処理が行われている場合にはこ の問題は回避できません。 それでは。 -- U.Nakamura