[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

Tadashi Shigeoka ·  Tue, March 5, 2013

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日目突入ちぅ - やちまうの戯言