【環境】
$ 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 12月 4 08:31 /usr/lib64/libldap-2.4.so.2 -> libldap-2.4.so.2.10.7 -rwxr-xr-x 1 root root 352624 10月 31 08:15 /usr/lib64/libldap-2.4.so.2.10.7 lrwxrwxrwx 1 root root 21 12月 16 14:43 /usr/lib64/libldap.so -> libldap-2.4.so.2.10.7 lrwxrwxrwx 1 root root 23 12月 4 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 10月 31 08:15 /usr/lib64/libldap_r-2.4.so.2.10.7 lrwxrwxrwx 1 root root 23 12月 16 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 12月 16 14:53 /usr/lib/libldap.so -> /usr/lib64/libldap.so lrwxrwxrwx 1 root root 23 12月 16 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 できるようになった。