php5.5.28+Oracle Clientでコンパイルエラー
最近は環境構築もほとんどchef経由のyumでやっつけてしまうことが多いのですが、たまに今やっているようになんだかいろんな依存性が解決できなくて手動でソースから環境を構築することがあります。
今回はphp5.5.28とOracleクライアントを組み合わせた環境でエラーが出た話。
phpはldapサポートでconfigure
ソースをダウンロードしてきて展開。configureはこんな。
$ ./configure --with-gd --enable-mbstring --with-mcrypt --with-pear --enable-opcache --with-pgsql --with-tidy --with-ldap --with-oci8
configureそのものはするっと終わる。
makeするとエラーが
ところがmakeするとエラーがでます。
一番末尾はこんな。
In file included from /tmp/php-5.5.28.tar.bz2/php-5.5.28/ext/ldap/php_ldap.h:30:0, from /tmp/php-5.5.28.tar.bz2/php-5.5.28/ext/ldap/ldap.c:45: /usr/include/oracle/12.1/client64/ldap.h:1014:18: error: conflicting types for 'ber_scanf' LDAPFUNCDECL int ber_scanf ( BerElement *ber, char * fmt, ... ); ^ In file included from /tmp/php-5.5.28.tar.bz2/php-5.5.28/ext/ldap/php_ldap.h:27:0, from /tmp/php-5.5.28.tar.bz2/php-5.5.28/ext/ldap/ldap.c:45: /usr/include/lber.h:335:1: note: previous declaration of 'ber_scanf' was here ber_scanf LDAP_P(( ^ make: *** [ext/ldap/ldap.lo] Error 1 make: *** Waiting for unfinished jobs.... [root@fc5ffbc8f35a php-5.5.28]#
つまり、Oracleクライアント中にあるldap.hとOpenLDAPで入ってくるldap.hで同じマクロを定義していますよーってことです。