ruby-1.9.2-p180のext/tk

投稿日:

いつだかにActiveTclを8.5.9にアップデートしてからRuby-1.9.2-p180をビルドし直したらext/tkのコンパイルに失敗していたことに最近気づいた。

昨日の夜からいろいろ調べたら、どうやら要因が2個あるっぽいことがわかった。

一つ目は、ActiveTcl側の変更でextconf.rb でのライブラリチェックに失敗していたこと。二つ目は、同じActiveTcl側の変更でVC++2010のヘッダーでdefineの競合がおきていたこと。

どちらも、C:\Tcl\lib\tclConfig.sh にある「-Dintptr_t=int -Duintptr_t=unsigned\ int」が悪さをしているよう。そういう意味では根本は1つか。

一つ目の方は、ここのパッチをあてる。ただし、そのままでは通らないので少し修正必要。要は途中に半角スペースのある「-Duintptr_t=unsigned\ int」をそのままコマンドラインオプションで指定するのではなくヘッダーファイルで指定するようにする変更。

2つ目の方は、c:\Program Files\Microsoft Visual Studio 10.0\VC\include\crtdefs.hの以下の部分。

#ifndef _INTPTR_T_DEFINED
#ifdef  _WIN64
typedef __int64             intptr_t;
#else
typedef _W64 int            intptr_t;
#endif
#define _INTPTR_T_DEFINED
#endif

#ifndef _UINTPTR_T_DEFINED
#ifdef  _WIN64
typedef unsigned __int64    uintptr_t;
#else
typedef _W64 unsigned int   uintptr_t;
#endif
#define _UINTPTR_T_DEFINED
#endif

さっきの-Dで定義済みだとtypedefで同じ名前の型を定義することになってしまうので、とりあえずtclConfig.shに「-D_INTPTR_T_DEFINED=1 -D_UINTPTR_T=1」を追加。

これで無事コンパイルが通った。めでたしめでたし。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です