From: "akira yamada / やまだあきら" Date: 2001-01-09T15:02:08+09:00 Subject: [ruby-list:27061] Ruby/Python with ruby 1.6.2 やまだあきらです. Debian GNU/Linux にて Ruby パッケージをメンテナンスしているのですが 次のようなレポート(Debian パッケージにおけるバグ報告です)が来ました. > Package: ruby-dev > Version: 1.6.2-1 > Severity: important > > When trying to configure Python/Ruby with: > > ruby extconf.rb > > I get error: > > checking for Py_Initialize() in -lpython1.5... no > > I have used mkmf.rb of ruby-dev in Potato and it works fine. Debian では ruby-dev というパッケージに mkmf.rb が入っていて ruby-dev in Potato というのは ruby 1.4.6 ベースです. 上記部分で何が起っているかというと -lpthread が足りなくてリンクに失敗しているのです. ただしここで, Ruby/Python の extconf.rb では Python の config/Makefile から「LIBS=」などを抜き出す という処理を行っていて, その中には正しく -lpthread などが含まれています. ところが, その結果を $LOCAL_LIBS に入れるというところがまずいようなのです. 実際 $LOCAL_LIBS を $libs に変えると上記部分は「yes」になり Makefile が作られますし build もできます. そこで 1.4.x と 1.6.x で mkmf.rb を比べてみると, このあたり: @@ -60,14 +76,26 @@ cfile = open("conftest.c", "w") cfile.print src cfile.close - xsystem(format(LINK, $CFLAGS, $LDFLAGS, opt, $LOCAL_LIBS)) + ldflags = $LDFLAGS + if /mswin32/ =~ RUBY_PLATFORM and !$LIBPATH.empty? + ENV['LIB'] = ($LIBPATH + [ORIG_LIBPATH]).compact.join(';') + else + $LDFLAGS = ldflags.dup + $LIBPATH.each {|d| $LDFLAGS << " -L" + d} + end + begin + xsystem(format(LINK, $CFLAGS, $CPPFLAGS, $LDFLAGS, opt, $LOCAL_LIBS)) + ensure + $LDFLAGS = ldflags + ENV['LIB'] = ORIG_LIBPATH if /mswin32/ =~ RUBY_PLATFORM + end end ということのようなのですが, これはどちらでどう直してもらうべきなんでしょうか? -- やまだ あきら (akira@arika.org, akira@ruby-lang.org or akira@ad-hoc.org)