[Apache][PHP4] Cannot load /etc/httpd/modules/libphp4.so into server: libpq.so.2.1: cannot open shared object file: No such file or directory
Apache + PHP4 + PostgreSQL で下記のようなエラーが出た場合の解決方法をメモ。
libphp4.so で使う libpq.so.2.1 が無いというエラーです。
# /etc/init.d/httpd configtest
Syntax error on line 941 of /etc/httpd/conf/httpd.conf:
Cannot load /etc/httpd/modules/libphp4.so into server: libpq.so.2.1: cannot open shared object file: No such file or directory
libphp4.so のダイナミックリンクの関係を表示して確認すると、libpq.so.2.1 => not found となっていることが確認できます。
# ldd /etc/httpd/modules/libphp4.so
libpam.so.0 => /lib/libpam.so.0 (0x40177000)
libdl.so.2 => /lib/libdl.so.2 (0x40180000)
libpq.so.2.1 => not found
libcrypt.so.1 => /lib/libcrypt.so.1 (0x40184000)
libresolv.so.2 => /lib/libresolv.so.2 (0x401b2000)
libm.so.6 => /lib/libm.so.6 (0x401c4000)
libnsl.so.1 => /lib/libnsl.so.1 (0x401e6000)
libc.so.6 => /lib/libc.so.6 (0x401fd000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)
# find / -name libpq.so.2.1
/usr/local/src/postgresql-7.0.3/src/interfaces/libpq/libpq.so.2.1
/usr/local/pgsql/lib/libpq.so.2.1
postgres 以下にある libpq.so.2.1 を /lib 以下にシンボリックリンクを貼ります。
# ln -s /usr/local/pgsql/lib/libpq.so.2.1 /lib/libpq.so.2.1
ちゃんと libpq.so.2.1 が読み込めていることを確認できました。
# ldd /etc/httpd/modules/libphp4.so
libpam.so.0 => /lib/libpam.so.0 (0x40177000)
libdl.so.2 => /lib/libdl.so.2 (0x40180000)
libpq.so.2.1 => /lib/libpq.so.2.1 (0x40184000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0x40196000)
libresolv.so.2 => /lib/libresolv.so.2 (0x401c4000)
libm.so.6 => /lib/libm.so.6 (0x401d6000)
libnsl.so.1 => /lib/libnsl.so.1 (0x401f8000)
libc.so.6 => /lib/libc.so.6 (0x4020f000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)
# vi /etc/httpd/conf/httpd.conf
#LoadModule php4_module lib/apache/libphp4.so
LoadModule php4_module /usr/lib/apache/libphp4.so
[参考]:2日目突入ちぅ - やちまうの戯言