On Tuesday 03 January 2006 15:18, Brian Akins wrote:
> Nick Kew wrote:
> > Amongst modules, we should apply the same principle: e.g.
> > with mod_deflate and zlib.
>
> Or why not just have mod_deflate link against zlib and not have httpd do
> it.
It does that now - if built from ./configure. That gets confusing -
and has potential for segfaults - when there's some other module
or library that needs zlib.
Indeed, it's worse than that. Here's after a configure+make:
$ ldd .libs/mod_deflate.so
linux-gate.so.1 => (0xffffe000)
libz.so.1 => /lib/libz.so.1 (0xb7fc9000)
libpthread.so.0 => /lib/libpthread.so.0 (0xb7f76000)
libc.so.6 => /lib/libc.so.6 (0xb7e5e000)
/lib/ld-linux.so.2 (0x80000000)
$ apxs -c mod_deflate.c
[chop]
$ ldd .libs/mod_deflate.so
linux-gate.so.1 => (0xffffe000)
libc.so.6 => /lib/libc.so.6 (0xb7ec1000)
/lib/ld-linux.so.2 (0x80000000)
That's a difference of *two* libs! Since libz isn't linked in httpd, we get:
# apxs -i mod_deflate.la
[chop]
# apachectl configtest
httpd: Syntax error on line 263 of /usr/local/apache/conf/httpd.conf: Cannot
load /usr/local/apache2/modules/mod_deflate.so into
server: /usr/local/apache2/modules/mod_deflate.so: undefined symbol: deflate
Ouch!
That is of course resolved by LoadFile /lib/libz.so, which is what I
contend should be standard practice. So when another module
relies on libz, there's no side effect that manifests mysteriously
according to whether and when mod_deflate is loaded.
> SSL seems to be the worst culprit. httpd gets linked against tons
> of stuff so that I cannot copy the binary to a non-ssl enabled host.
Indeed. That principle applies equally to SQL client libs for DBD,
to DBM libs, and somewhat even to things like expat.
--
Nick Kew