From: "mame (Yusuke Endoh)" Date: 2012-03-27T03:06:47+09:00 Subject: [ruby-dev:45442] [ruby-trunk - Feature #5317][Assigned] rubyのヘッダファイルを使った拡張を行う際にoff_tの宣言回避をする事が出来ない。 Issue #5317 has been updated by mame (Yusuke Endoh). Status changed from Open to Assigned Assignee set to nobu (Nobuyoshi Nakada) まあこれは何かしら対処すべきじゃないですかね。 #define off_t を入れたのはなかださんっぽい (r10720) ので、 なかださんお願いします。 -- Yusuke Endoh ---------------------------------------- Feature #5317: rubyのヘッダファイルを使った拡張を行う際にoff_tの宣言回避をする事が出来ない。 https://bugs.ruby-lang.org/issues/5317#change-25214 Author: mattn (Yasuhiro Matsumoto) Status: Assigned Priority: Normal Assignee: nobu (Nobuyoshi Nakada) Category: core Target version: 2.0.0 以前、vimのif_ruby(ruby拡張)の修正を担当した時、mingw32でのuid_tの宣言とrubyに同梱されているwin32.hでの宣言に差異があり、リンクされた物がクラッシュするというバグに遭遇しました。 vimでrubyに関連するのはif_ruby.cであり、そのファイルのみがruby.hをincludeしているのですが(他のファイルもruby.hをincludeしろというのは無しです)、別のファイルはmingw32の宣言である sys/types.h: typedef long _off_t; と ruby-1.9.1/ruby/win32.h: #define off_t __int64 https://github.com/ruby/ruby/blob/trunk/include/ruby/win32.h が競合してしまい、構造体内にoff_t型のメンバを持つ2つのオブジェクトファイル通しでメンバ参照すると落ちるという物でした。 win32.hの方は、SIZEOF_OFF_Tが宣言されていれば#defineを回避出来ますが、このSIZEOF_OFF_Tはconfigureで吐かれるconfig.hに出力されてしまっている事から、ruby.h → ruby/ruby.h → ruby/config.h と読み込まれて(win32の場合)、結果としてSIZEOF_OFF_Tは変更出来ない事になります。 vimの場合は、LoadLibraryとGetProcAddressを使ったダイナミックローディングを使っていますが、出来れば宣言くらいは横着してヘッダファイルが使いたいので、出来ればoff_tの宣言回避が出来ない物かと思っています。 -- http://bugs.ruby-lang.org/