36
33

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-05-18

(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

36
33
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
36
33

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?