02 September
2011

apxs の include dir と library name の指定

command option of /usr/local/apache/bin/apxs

■背景
apache killer 対策にて、
 modules/mod_rewrite.so
 modules/mod_headers.so
を用いるのですが、とある環境では、上記 DSO (ref.
apache 2.2) を load するよう設定して、apache を
restart したところ、下記

Cannot load /etc/httpd/modules/mod_rewrite.so into server: /etc/httpd/modules/mod_rewrite.so: undefined symbol: __db_ndbm_open
の stderr が呈示され、apache 起動に失敗します。

■仮説
確信はなかったのですが、「compile 時になにか問題
があったのだろう」と推定し、再度 build することに
してみました。

手順(というか、発行した command は)は下記
/usr/local/apache/bin/apxs -c mod_rewrite.c
の通り。

が、今度は、この compile でも error
unchor@rescue:/usr/local/src/apache/apache_1.3.41/src/modules/standard$ /usr/local/apache/bin/apxs -c mod_rewrite.c
gcc -DLINUX=22 -DHAVE_SET_DUMPABLE -DMOD_SSL=208131 -DMOD_PERL -DUSE_PERL_SSI -fno-strict-aliasing
-I/usr/local/include -DUSE_HSREGEX -DEAPI -fpic -DSHARED_MODULE -I/usr/local/apache_1.3.41/include
-c mod_rewrite.c
In file included from mod_rewrite.c:51:
mod_rewrite.h:91:18: ndbm.h: No such file or directory
apxs:Break: Command failed with rc=1
が....

■調査
問題の
 ndbm.h
unchor@rescue:~$ rpm -ql gdbm-devel-1.8.0-14
/usr/include/gdbm
/usr/include/gdbm.h
/usr/include/gdbm/dbm.h
/usr/include/gdbm/gdbm.h
/usr/include/gdbm/ndbm.h
/usr/lib/libgdbm.a
/usr/lib/libgdbm.la
/usr/lib/libgdbm.so
/usr/share/info/gdbm.info.gz
/usr/share/man/man3/gdbm.3.gz
中にあるようでしたので、include dir を明示的に指定
/usr/local/apache/bin/apxs -c -I /usr/include/gdbm mod_rewrite.c
して、再度 try すると、少なくとも build 時 error
はでなくなったのですが、そもそも apache 起動時の
stderr は解消せず、依然 apache が起動しませんで
した。

■手順
要は、library name の指定も必要であった、という
ことでした。正しくは、下記
/usr/local/apache/bin/apxs -c -I /usr/include/gdbm -l gdbm mod_rewrite.c
cp -p mod_rewrite.so /etc/httpd/modules/
です。

■謝辞
今回お世話になった web site
 http://ameblo.jp/squikole/entry-10022618878.html
多謝です。


Posted by unchor at 18:06 | Comments (0)
<< apache 1.3.x の apache killer 対策 | Main | [apache killer] apache 1.3.x に於ける mod_rewrite 設定纏め >>
Comments
There are no comments.
Post a comment