CentOS 7 で PHP 7.2 を OpenLDAP 付きで configure/make するとエラーになる

【環境】

$ cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)

$ rpm -qa | grep openldap
openldap-clients-2.4.44-20.el7.x86_64
openldap-devel-2.4.44-20.el7.x86_64
openldap-2.4.44-20.el7.x86_64

以下のようなオプションで、PHP 7.2 をconfigureすると、LDAPのところでエラーになる。

# ./configure \
--prefix=/usr/local/lib/php-7.2 \
--with-ldap \
・
・省略
・
checking size of long int... (cached) 8
configure: error: Cannot find ldap libraries in /usr/lib.


OpenLDAPのライブラリが入っているはずだが、状況を確認。

# ls -l /usr/lib64/libldap*
lrwxrwxrwx 1 root root     21 124 08:31 /usr/lib64/libldap-2.4.so.2 -> libldap-2.4.so.2.10.7
-rwxr-xr-x 1 root root 352624 1031 08:15 /usr/lib64/libldap-2.4.so.2.10.7
lrwxrwxrwx 1 root root     21 1216 14:43 /usr/lib64/libldap.so -> libldap-2.4.so.2.10.7
lrwxrwxrwx 1 root root     23 124 08:31 /usr/lib64/libldap_r-2.4.so.2 -> libldap_r-2.4.so.2.10.7
-rwxr-xr-x 1 root root 381440 1031 08:15 /usr/lib64/libldap_r-2.4.so.2.10.7
lrwxrwxrwx 1 root root     23 1216 14:43 /usr/lib64/libldap_r.so -> libldap_r-2.4.so.2.10.7


64bit用パッケージしか入っていないので、/usr/lib/ 以下には、libldap* のファイルは無い。
configure で /usr/lib 以下にライブラリを探しに行っているところを見ると、32bit用のパッケージがあれば良いのかもしれない。

# yum install openldap-devel.i686

でインストールしようとすると、他にも依存関係のあるパッケージが大量にリストアップされる。
この方法は危険な匂いがするので中止。



/usr/lib/libldap.so と /usr/lib/libldap_r.so を探しに行っていると思われるので、次のように /usr/lib 以下から /usr/lib64 のファイルへシンボリックリンクを作成。

# ln -s /usr/lib64/libldap.so /usr/lib/libldap.so
# ln -s /usr/lib64/libldap_r.so /usr/lib/libldap_r.so


確認

# ls -l /usr/lib/libldap*
lrwxrwxrwx 1 root root 21 1216 14:53 /usr/lib/libldap.so -> /usr/lib64/libldap.so
lrwxrwxrwx 1 root root 23 1216 14:53 /usr/lib/libldap_r.so -> /usr/lib64/libldap_r.so


再びconfigureしてみると、問題は回避される。

# ./configure \
--prefix=/usr/local/lib/php-7.2 \
--with-ldap \
・
・省略
・
Thank you for using PHP.

次に、make でも別なエラーに遭遇する。

# make
・
・省略
・
/usr/bin/ld: ext/ldap/.libs/ldap.o: undefined reference to symbol 
'ber_scanf'
/usr/lib64/liblber-2.4.so.2: error adding symbols: DSO missing from 
command line
collect2: error: ld returned 1 exit status
make: *** [sapi/cli/php] エラー 1


ber_scanf というシンボルが見えない事が原因というメッセージなので、これをネットで検索すると、man page が出る。
https://linux.die.net/man/3/ber_scanf

これによると、このシンボルは、
 OpenLDAP LBER (liblber, -llber)
に含まれるらしい。
liblber.so のこと。

configure 前に LDFLAGS で liblber.so を参照するように指定して、やり直し。

# export LDFLAGS=-llber
# configure 
・
・省略
・
# make

これで make できるようになった。