ruby-trunkコンパイルエラー対策

投稿日:

ruby-trunkのコンパイルが1週間くらい出来なくて悶々としていたけど、昨日色々いじっていてようやく解決した。

コンパイルエラーになっていたのはdbm.soを作る所。そこで_gdbm_versionが見つからないと言われる。

さて、configureではちゃんとgdbm.libの_gdbm_versionを見つけられているのになんでだろうと思っていた。

結論は、ヘッダーの以下の記述が抜けていたのが問題だった。

#if defined(_WIN32) && !defined(GDBM_STATIC)
# if defined(BUILDING_DLL)
#  define GDBM_EXTERN extern __declspec(dllexport)
# else
#  define GDBM_EXTERN extern __declspec(dllimport)
# endif
#else
# define GDBM_EXTERN extern
#endif

これは、gdbm.dllを作るときのヘッダー gdbm.h にはあるけど、rubyのdbm.soを作るときにインクルードするヘッダ(ndbm.h)には含まれないもの。かと言って、両方インクルードするとdatumという構造体がgdbm.hにもndbm.hにも入っているのでエラーでこけてしまう。

というわけで、ndbm.hのtypeded struct {} datum; をコメントアウトして、そこに #include “gdbm.h” を入れたら無事コンパイルが通った。

なんともややこしい。

コメントを残す

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