From: Takahiro Kambe Date: 2003-08-16T19:19:12+09:00 Subject: [ruby-list:38129] Re: ruby-tcpwrap and mkmf.rb In message <200308160714.h7G7ErPL014647@sharui.nakada.kanuma.tochigi.jp> on Sat, 16 Aug 2003 16:14:55 +0900, nobu.nakada@nifty.ne.jp wrote: > At Sat, 16 Aug 2003 15:49:52 +0900, > Takahiro Kambe wrote: > > cc -o conftest -I/usr/pkg/lib/ruby/1.6/i386-netbsdelf -O2 -fPIC -pipe -Wl,-export-dynamic conftest.c -lwrap -lc -lcrypt -lm > > /usr/lib/libwrap.so: undefined reference to `allow_severity' > > /usr/lib/libwrap.so: undefined reference to `deny_severity' > > この二つはlibwrapで定義されているはずのもののようですが、別のラ > イブラリに分かれているとかでしょうか。 違います。かつて同じようなメールを出していました。 -- 神戸 隆博 / Takahiro Kambe Message-Id: <20010415131212.C41A13227@helium.ruby-lang.org> Subject: [ruby-list:29276] ruby-tcpwrap and mkmf.rb Date: Sun, 15 Apr 2001 22:12:13 +0900 From: Takahiro Kambe To: ruby-list@ruby-lang.org (ruby mailing list) Reply-To: ruby-list@ruby-lang.org X-Mailer: Mew version 1.94.2 on Emacs 20.7 / Mule 4.0 (HANANOEN) Precedence: bulk X-Mail-Count: 29276 X-MLServer: fml [fml 3.0pl#17]; post only (only members can post) X-Dispatcher: imput version 20000414(IM141) Content-Type: Text/Plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit こんばんは。 ruby-tcpwrapをNetBSDで使用する場合ですが、extconf.rbでは、 require "mkmf" dir_config("wrap") dir_config("ident") if have_header("tcpd.h") and have_library("wrap", "hosts_ctl") ... としていて、hosts_ctl()がlibwrap.aに含まれているかを、mkmf.rbの have_library()で、 int main() { return 0; } int t() { hosts_ctl(); return 0; } といった関数をライブラリとリンクできるかとチェックしてます。ところが、 これはリンクエラーで失敗します。 NetBSDのhosts_access(3)によると、 #include "tcpd.h" extern int allow_severity; extern int deny_severity; となっていて、 The allow_severity and deny_severity variables determine how accepted and rejected requests may be logged. They must be provided by the caller and may be modified by rules in the access control tables. と記述されています。すなわち、ライブラリを使用する側が int allow_severity = 0; int deny_severity = 0; といった変数定義を持たなければならず、これらの広域変数が未定義のエラー となるわけです。 さて、これはどの様に解決するのがスマートなんでしょうか。 -- 神戸 隆博(かんべ たかひろ) at home