Namazu-devel-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

strcasestr() and libnmzut.a problem



安部です。

On Fri, 04 Aug 2000 17:18:39 +0900
Satoru Takabayashi <satoru-t@xxxxxxxxxxxxxxxxxx> wrote:

> >> という問題を解決するには、標準の strcasecmp を使わずに、自前
> >> で用意するしかないと思うのですが。他に方法があります?
(snip)
> なるほど。ではそのようにお願いできます?

結局別の方法を取ってしまいました。(^^;;

> >それにnmz_str(n)casecmp()で日本語の文字列を
> >比較している部分はsrc/result.cに一ヶ所ある
> >だけです。

この一ヶ所というのはstrcasestr()のことですが、
str(n)casecmp()そのものの代用品をつくるのでは
なく、lib/strstr.cを基にstrcasestr()を書き直す
ことで対処しました。もっともtolower()に相当する
部分はASCII only lowerにしてしまいましたが...

これらのad-hoc functionがどんどんlibnmz.soに
入っていってsymbolがいたずらに増えるのは危険
極まりないので、libnmzut.aに入れてstatic link
する方法を考えました。具体的にはlib以下に
adhoc.[ch]というファイルを追加して、そこで定義
しています。現在のところ、adhoc_tolower()と
adhoc_strcasestr()の2つが入っています。

で、nmz/Makfile.amに
LDADD = @INTLLIBS@ $(top_builddir)/lib/libnmzut.a
を追加してbuildしましたが、Namazu 2.0.4のnamazu
にLD_PRELOADでCVS版のlibnmz.soを読み込ませると、
adhoc_tolower()がundefined symbolだと怒られて
しまいました。nmz/Makefile.inを見ると、
libnmz_la_LIBADDが空のままでLinkされていません
でした。LDADD -> libnmz_la_LIBADDしてmakeすると、
今度はlibnmz.laを作るところでエラーで止まって
しまいます。どうやらlibtool libraryでないとLink
できないようです。

そこで、
noinst_LTLIBRARIES = libnmzut.la
libnmzut_la_LDFLAGS = -static
なんて方法で試してみると、今度はうまく行きました。
というわけで、以上の修正を先程commitしました。


  A A
= . . =
   V
end
Ryuji Abe