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 <taca / sky.yamashina.kyoto.jp>
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