From: WATANABE Hirofumi Date: 2002-06-24T16:58:55+09:00 Subject: [ruby-list:35443] Re: mkmf の have_library わたなべです。 一部順序を入れ換えてます。 Takeshi Honda writes: :> 置くのはいいんですが、どこから持ってきたんでしょうか? : :ここです。SablotFacade(extconf.rbを試みているパッケージ) :のREADMEにURLが書いてありました。 :http://www.gingerall.com 結局 http://sourceforge.net/project/showfiles.php?group_id=10127&release_id=92796 のexpat_win32bin_1_95_3.exeですね。これで試してみました。 :extconf.rbは次のようにしました。 : :----------------------------------------- :require "mkmf" : :dir_config("expat"); :have_library("expat"); :----------------------------------------- : :それから、cygwinで、 :ruby :extconf.rb --with-expat-dir=/cygdrive/c/home/bin/ruby/webapp/sablot :としました。 :しかし、結果は前と同じでした。 :なぜでしょうか? あ、lib/やinclude/という構造になってないからですね。 見落してました。元々Sablot-Win-0.90.zipではそういう構造になっ てるので、こんな感じでいけます。 % cp /c/Expat-1.95.3/Libs/libexpat.lib /c/Sablot-0.90/lib % cat extconf.rb require "mkmf" dir_config("expat") have_library("expat") % ruby extconf.rb --with-expat-dir=/c/Sablot-0.90 checking for main() in -lexpat... yes 直接ライブラリやヘッダのある位置を指定するときは --with-expat-lib=/some/where --with-expat-include=/some/where とします。 :> :$LDFLAGS = " -L/home/bin/ruby/webapp/sablot :> -llibexpatw "; :> :> はdir_configを使います。たとえば :> dir_config("expat") :> として :> --with-expat-dir=/some/where :> のように外から指定するようにします。 : :それはなぜですか?もともとパッケージに含まれていたextconf.rb :を修正して :いるのですが、そこにはこのように書いてありました。 :こっちのが楽だと思いますが、これは致命的なミスですか? 致命的なミスとも言えます。 o まず-L/some/whareは決め打ちである点がまずい。クロス環境を無視している。 o $LDFLAGSに-lfooを含めるのは順番がまずい。ライブラリがオブジェク トファイルよりも前に来てしまうので、undefined symbolになってしまう。 $libsか$LOCAL_LIBSに入れるんだったらまだわかるけど、そもそも hava_libraryで試そうとしているライブラリをあらかじめ指定す るのも変。 もし本当にそのSablotFacadeという拡張ライブラリがこうなってい るのなら間違いです。 -- わたなべひろふみ