qmail で makeエラー

http://d.hatena.ne.jp/sukesam/20030916

qmail のセットアップ時にエラー

[root@www netqmail-1.06]# make setup check
( cat warn-auto.sh; \
echo CC=\'`head -1 conf-cc`\'; \
echo LD=\'`head -1 conf-ld`\' \
) > auto-ccld.sh
cat auto-ccld.sh make-load.sh > make-load
chmod 755 make-load
(中略)
./load qmail-remote control.o constmap.o timeoutread.o \
timeoutwrite.o timeoutconn.o tcpto.o now.o dns.o ip.o \
tls.o ssl_timeoutio.o -L/usr/local/ssl/lib -lssl -lcrypto \
ipalloc.o strsalloc.o ipme.o quote.o ndelay.a case.a sig.a open.a \
lock.a seek.a getln.a stralloc.a alloc.a substdio.a error.a \
str.a fs.a auto_qmail.o `cat dns.lib` `cat socket.lib`
/usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o)(.text+0x51): In function `dlfcn_load':
: undefined reference to `dlopen'
/usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o)(.text+0xc2): In function `dlfcn_load':
: undefined reference to `dlclose'
/usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o)(.text+0xf1): In function `dlfcn_load':
: undefined reference to `dlerror'
/usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o)(.text+0x179): In function `dlfcn_unload':
: undefined reference to `dlclose'
/usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o)(.text+0x239): In function `dlfcn_bind_var':
: undefined reference to `dlsym'
/usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o)(.text+0x289): In function `dlfcn_bind_var':
: undefined reference to `dlerror'
/usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o)(.text+0x331): In function `dlfcn_bind_func':
: undefined reference to `dlsym'
/usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o)(.text+0x381): In function `dlfcn_bind_func':
: undefined reference to `dlerror'
collect2: ld returned 1 exit status
make: *** [qmail-remote] Error 1
[root@www netqmail-1.06]# pwd
/opt/local/src/qmail/netqmail-1.06

/usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o)(.text+0x51): In function `dlfcn_load':
: undefined reference to `dlopen'
は、dlfcn_load にて、dlopen が定義されていないということ、
つまり、dlopen が定義されている、DSO(ダイナミック共有オブジェクト)へのリンクがない。
なので、Makefileコンパイルオプションに -ldl をつけてやるとDSOを呼べるようになる。

編集前:
1571 qmail-remote: \
1572 load qmail-remote.o control.o constmap.o timeoutread.o timeoutwrite.o \
1573 timeoutconn.o tcpto.o now.o dns.o ip.o ipalloc.o strsalloc.o ipme.o quote.o \
1574 ndelay.a case.a sig.a open.a lock.a seek.a getln.a stralloc.a alloc.a \
1575 substdio.a error.a str.a fs.a auto_qmail.o dns.lib socket.lib
1576 ./load qmail-remote control.o constmap.o timeoutread.o \
1577 timeoutwrite.o timeoutconn.o tcpto.o now.o dns.o ip.o \
1578 tls.o ssl_timeoutio.o -L/usr/local/ssl/lib -lssl -lcrypto\
1579 ipalloc.o strsalloc.o ipme.o quote.o ndelay.a case.a sig.a open.a \
1580 lock.a seek.a getln.a stralloc.a alloc.a substdio.a error.a \
1581 str.a fs.a auto_qmail.o `cat dns.lib` `cat socket.lib`
編集後:
1571 qmail-remote: \
1572 load qmail-remote.o control.o constmap.o timeoutread.o timeoutwrite.o \
1573 timeoutconn.o tcpto.o now.o dns.o ip.o ipalloc.o strsalloc.o ipme.o quote.o \
1574 ndelay.a case.a sig.a open.a lock.a seek.a getln.a stralloc.a alloc.a \
1575 substdio.a error.a str.a fs.a auto_qmail.o dns.lib socket.lib
1576 ./load qmail-remote control.o constmap.o timeoutread.o \
1577 timeoutwrite.o timeoutconn.o tcpto.o now.o dns.o ip.o \
1578 tls.o ssl_timeoutio.o -L/usr/local/ssl/lib -lssl -lcrypto -ldl\
1579 ipalloc.o strsalloc.o ipme.o quote.o ndelay.a case.a sig.a open.a \
1580 lock.a seek.a getln.a stralloc.a alloc.a substdio.a error.a \
1581 str.a fs.a auto_qmail.o `cat dns.lib` `cat socket.lib`

他にもあるが同様に追加する