とりあえず現状を載せておきます。
brew upgrade
を実行したら、php-buildでインストールしたphpの実行に失敗するようになりました。
php-buildは最新版であることを確認して、(コミットハッシュ: e2969a6
) install.sh
を実行しました。
結論としては CXXFLAGS='-std=c++11'
を追加してビルドすると、php
が実行できるようになりました。
追記 (2017/08/28 14:52)
Fix default temporary directory for php-build on macOS by hnw · Pull Request #467 · php-build/php-build でこの問題が修正され、ビルド時に環境変数CXXFLAGS='-std=c++11'
を指定しなくてもよくなりました。PHP5.3.29もビルドできるようになりました。
環境
- MacBook Pro 2016Mid
- macOS Sierra 10.12.6
- direnv で
php
のパスを設定 - ghq で php-build をインストール
現象
PHP実行
$ php -v dyld: Library not loaded: /usr/local/opt/jpeg/lib/libjpeg.8.dylib Referenced from: /Users/tenkoma/local/php/7.1.8/bin/php Reason: image not found Abort trap: 6
php-build
$ ghq look php-build cd /Users/tenkoma/src/github.com/php-build/php-build bash-3.2$ time YACC=$(brew --prefix bison)/bin/bison PHP_BUILD_EXTRA_MAKE_ARGUMENTS=-j7 php-build -i development 7.1.8 ~/local/php/7.1.8/ [Info]: Loaded extension plugin [Info]: Loaded apc Plugin. [Info]: Loaded composer Plugin. [Info]: Loaded github Plugin. [Info]: Loaded uprofiler Plugin. [Info]: Loaded xdebug Plugin. [Info]: Loaded xhprof Plugin. [Info]: Loaded zendopcache Plugin. [Info]: php.ini-development gets used as php.ini [Info]: Building 7.1.8 into /Users/tenkoma/local/php/7.1.8/ [Downloading]: https://secure.php.net/distributions/php-7.1.8.tar.bz2 [Preparing]: /var/folders/pc/vq2zc_sn05v190vzzvz99bpc0000gn/T//php-build/source/7.1.8 ^@[Compiling]: /var/folders/pc/vq2zc_sn05v190vzzvz99bpc0000gn/T//php-build/source/7.1.8 ^@^@ ----------------- | BUILD ERROR | ----------------- Here are the last 10 lines from the log: ----------------------------------------- ^ _Nullable /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/include/signal.h:106:48: note: insert '_Nonnull' if the pointer should never be null int sigvec(int, struct sigvec *, struct sigvec *); ^ _Nonnull 352 warnings generated. 352 warnings generated. 352 warnings generated. 331 warnings generated. ----------------------------------------- The full Log is available at '/tmp/php-build.7.1.8.20170814220930.log'. [Warn]: Aborting build. real 3m15.342s user 6m5.609s sys 1m21.761s
ビルド成功しました(追記 2017/08/16 1:22)
下の、「libjpegのエラーについては、ビルドしなおせば、上記のエラーは発生しなくなります」も確認ください。 解決策情報をいただきました。
はじめまして。同じ症状でブログにたどり着きましたので情報共有を。
— 田口 誠 Makoto Taguchi (@petty_conan) 2017年8月15日
YACC=$(brew --prefix bison)/bin/bison CXXFLAGS='-std=c++11' phpenv install 7.1.8
で私の環境ではビルドできました。
jpeg に関しては brew upgrade で 9b が入ってくるのですが、PHPがサポートするのは 8 までのようなので、ダウングレードする必要がありそうです。https://t.co/fT2HLDbwRl
— 田口 誠 Makoto Taguchi (@petty_conan) 2017年8月15日
php-build のエラーログを見るとわかりますが、c++11 サポートが必要とのことで、フラグをつける必要がありました。
— 田口 誠 Makoto Taguchi (@petty_conan) 2017年8月15日
詳しく追っていませんが、Xcodeのコンパイラ(Apple LLVM)のバージョンに依存すると思われます。
やってみます。まず、libjpeg のバージョンを切り替え
$ brew info libjpeg jpeg: stable 9b (bottled) Image manipulation library http://www.ijg.org /usr/local/Cellar/jpeg/8d (19 files, 708.3KB) Poured from bottle on 2016-11-19 at 12:49:23 /usr/local/Cellar/jpeg/9b (20 files, 724KB) * Poured from bottle on 2017-08-14 at 00:35:36 From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/jpeg.rb $ brew switch libjpeg 8d Cleaning /usr/local/Cellar/jpeg/8d Cleaning /usr/local/Cellar/jpeg/9b 17 links created for /usr/local/Cellar/jpeg/8d
次に CXXFLAGS
を指定してビルド
$ ghq look php-build cd /Users/tenkoma/src/github.com/php-build/php-build bash-3.2$ time YACC=$(brew --prefix bison)/bin/bison CXXFLAGS='-std=c++11' PHP_BUILD_EXTRA_MAKE_ARGUMENTS=-j7 php-build -i development 7.1.8 ~/local/php/7.1.8/ [Info]: Loaded extension plugin [Info]: Loaded apc Plugin. [Info]: Loaded composer Plugin. [Info]: Loaded github Plugin. [Info]: Loaded uprofiler Plugin. [Info]: Loaded xdebug Plugin. [Info]: Loaded xhprof Plugin. [Info]: Loaded zendopcache Plugin. [Info]: php.ini-development gets used as php.ini [Info]: Building 7.1.8 into /Users/tenkoma/local/php/7.1.8/ [Downloading]: https://secure.php.net/distributions/php-7.1.8.tar.bz2 [Preparing]: /var/folders/pc/vq2zc_sn05v190vzzvz99bpc0000gn/T//php-build/source/7.1.8 ^@[Compiling]: /var/folders/pc/vq2zc_sn05v190vzzvz99bpc0000gn/T//php-build/source/7.1.8 ^@^@^@^@[xdebug]: Installing version 2.5.5 [xdebug]: Compiling xdebug in /var/folders/pc/vq2zc_sn05v190vzzvz99bpc0000gn/T//php-build/source/xdebug-2.5.5 [xdebug]: Cleaning up. [Info]: Enabling Opcache... [Info]: Done [Info]: The Log File is not empty, but the Build did not fail. Maybe just warnings got logged. You can review the log in /tmp/php-build.7.1.8.20170816011335.log [Success]: Built 7.1.8 successfully. real 6m12.645s user 16m37.504s sys 5m20.081s bash-3.2$ php -v PHP 7.1.8 (cli) (built: Aug 16 2017 01:18:24) ( NTS ) Copyright (c) 1997-2017 The PHP Group Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies with Zend OPcache v7.1.8, Copyright (c) 1999-2017, by Zend Technologies with Xdebug v2.5.5, Copyright (c) 2002-2017, by Derick Rethans
ビルド時刻が更新されているので、ビルド成功です。
libjpegのエラーについては、ビルドしなおせば、上記のエラーは発生しなくなります(さらに追記 2017/08/18 18:27)
さらに情報をいただきました。ありがとうございます。
php-build の件で追加情報です。jpeg ですが、9b でもビルドできました。ただしGDの動作まで確認した訳ではなく、php -i で
— 田口 誠 Makoto Taguchi (@petty_conan) 2017年8月17日
JPEG Support => enabled
libJPEG Version => 9 compatible
の表記を確認した程度です
先述の通り、PHP公式ドキュメントがまだアップデートされていないので、どう捉えるか、ではあると思います。
— 田口 誠 Makoto Taguchi (@petty_conan) 2017年8月17日
libjpeg に関してまとめると、phpenv 等を使用している場合は brew upgrade で 9b にアップデートされてしまうとビルド済みバイナリが動かなくなるので、8に戻すか過去のバイナリもビルドし直す必要がある、ということになります。
— 田口 誠 Makoto Taguchi (@petty_conan) 2017年8月17日
以上、ご報告まで。
libjpeg を元に戻してビルドし直しました。
$ brew switch libjpeg 9b Cleaning /usr/local/Cellar/jpeg/8d Cleaning /usr/local/Cellar/jpeg/9b 17 links created for /usr/local/Cellar/jpeg/9b $ ghq look php-build $ time YACC=$(brew --prefix bison)/bin/bison CXXFLAGS='-std=c++11' PHP_BUILD_EXTRA_MAKE_ARGUMENTS=-j7 php-build -i development 7.1.8 ~/local/php/7.1.8/ $ ~/local/php/7.1.8/bin/php -i | grep JPEG Supported filetypes => JPEG,TIFF JPEG Support => enabled libJPEG Version => 9 compatible
いただいた情報の通り、 php
実行できました。
5.4.45, 5.5.38, 5.6.31, 7.0.22, 7.1.8, 7.2beta2 までビルド成功しました。5.3.29では以下の通りビルド失敗しました。
$ time YACC=$(brew --prefix bison)/bin/bison CXXFLAGS='-std=c++11' PHP_BUILD_EXTRA_MAKE_ARGUMENTS=-j7 php-build -i development 5.3.29 ~/local/php/5.3.29/ [Info]: Loaded extension plugin [Info]: Loaded apc Plugin. [Info]: Loaded composer Plugin. [Info]: Loaded github Plugin. [Info]: Loaded uprofiler Plugin. [Info]: Loaded xdebug Plugin. [Info]: Loaded xhprof Plugin. [Info]: Loaded zendopcache Plugin. [Info]: php.ini-development gets used as php.ini [Info]: Building 5.3.29 into /Users/tenkoma/local/php/5.3.29/ [Downloading]: https://secure.php.net/distributions/php-5.3.29.tar.bz2 [Info]: Applying patches: /usr/local/bin/../share/php-build/patches/php-5.3.29-64bit-intl.patch [Preparing]: /var/folders/pc/vq2zc_sn05v190vzzvz99bpc0000gn/T//php-build/source/5.3.29 [Compiling]: /var/folders/pc/vq2zc_sn05v190vzzvz99bpc0000gn/T//php-build/source/5.3.29 ^@ ----------------- | BUILD ERROR | ----------------- Here are the last 10 lines from the log: ----------------------------------------- ^ _Nullable /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/include/stdio.h:475:6: note: insert '_Nonnull' if the pointer should never be null FILE *funopen(const void *, ^ _Nonnull 330 warnings generated. 330 warnings generated. 330 warnings generated. 331 warnings generated. ----------------------------------------- The full Log is available at '/tmp/php-build.5.3.29.20170818191216.log'. [Warn]: Aborting build. real 2m24.479s user 3m19.952s sys 1m30.081s
今後5.3を使う必要に迫られない限り、放置でいこうかと思います。