34
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Organization

Mac OS X El Capitan上でphp-buildするメモ

(2016/12/06追記)本稿の内容を勝手にやってくれるPull Requestがmergeされたので、下記のような苦労は過去のものになりました。「MacOSX上でphp-buildするときの苦労が減った話」も合わせてご確認ください。


Mac OS X El CapitanからOpenSSLのヘッダファイルが消えた話」で紹介したように、Mac OS X El Capitanの/usr以下のOpenSSLは0.9.8系かつヘッダファイルがないので、この環境でphp-buildでPHPをビルドしようと思ってもコンパイル中に死にます。

/var/tmp/php-build/source/7.0.6/ext/date/php_date.c:3756:5: note: use function 'llabs' instead
                                abs((utc_offset % 60)));
                                ^~~
                                llabs
6 warnings generated.
/var/tmp/php-build/source/7.0.6/ext/openssl/openssl.c:44:10: fatal error: 'openssl/evp.h' file not found
#include <openssl/evp.h>
         ^
1 error generated.
make: *** [ext/openssl/openssl.lo] Error 1

これを解決するためにconfigure--with-opensslオプションでHomebrewのOpenSSLを明示的に指定してやれば平和になるかと思いきや、これだけだと次のようにリンク時に死にます。

      _php_openssl_setup_crypto in xp_ssl.o
  "_TLSv1_1_server_method", referenced from:
      _php_openssl_setup_crypto in xp_ssl.o
  "_TLSv1_2_client_method", referenced from:
      _php_openssl_setup_crypto in xp_ssl.o
  "_TLSv1_2_server_method", referenced from:
      _php_openssl_setup_crypto in xp_ssl.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [sapi/cli/php] Error 1

これはMacOSX組み込みの古いlibsslをリンクしようとして死んでいます。結局、OpenSSLとLibxml2の両方についてHomebrewのものを指定する必要があります。

$ brew install openssl
$ brew install libxml2
$ PHP_BUILD_CONFIGURE_OPTS="--with-openssl=$(brew --prefix openssl) --with-libxml-dir=$(brew --prefix libxml2)" PHP_BUILD_EXTRA_MAKE_ARGUMENTS=-j4 phpenv install 7.0.6

これでうまくいく理由は、MacOSX組み込みのlibxml2と同じパスにlibsslが置かれているためです。組み込みのライブラリを1個も使わないようにすればライブラリのサーチパスにMacOSXのものが含まれなくなり、無事にHomebrewのOpenSSLが使われます。もしくは、リンク時の-Lオプションの順序を調整すればHomebrewのOpenSSLと組み込みのlibxml2でリンクすることもできます。

こんな面倒なことをせずにbrew link --force openssl; brew link --force libxml2という手もアリですが(←最近のHomebrewでは不可能になりました)、僕は慎重派なので個別対応しています。

参考URL

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
34
Help us understand the problem. What are the problem?