🍎
macOS に phpenv で PHP 8.3.7 以降をインストールできない場合の対処法
ある日、いつものように phpenv
で PHP 8.3.8 をインストールしようとしたところ、見慣れないエラーが表示されました。
configure: error: *** A compiler with support for C++17 language features is required.
色々と調べた結果、以下の記事に辿り着いたんですが、どうやら解決には至ってない様子。
上記の記事を参考に CXX
環境変数を設定したりしても確かにエラーは解消しません。そこで php-build のソースコードを眺めていると怪しげな記述が……
# icu4c 59+ requires C++11
if [[ -z "$CXXFLAGS" && $($(brew --prefix icu4c)/bin/icu-config --version) > "61" ]]; then
# icu4c 61+ compatability (see #499)
export CXXFLAGS="-std=c++11 -stdlib=libc++ -DU_USING_ICU_NAMESPACE=1"
elif [[ -z "$CXXFLAGS" && $($(brew --prefix icu4c)/bin/icu-config --version) > "59" ]]; then
export CXXFLAGS="-std=c++11 -stdlib=libc++"
fi
「icu4c 59+ requires C++11」のコメントと共に環境変数 CXXFLAGS
つまり C++ コンパイラに渡すオプションの中で -std=c++11
と指定されています。また、スクリプトを見る限りでは CXXFLAGS
が既に存在する場合は上書きされないようです。そこで、php-build
のスクリプトを参考に次のように CXXFLAGS
を設定した上で phpenv
を実行してみます。
env \
CXXFLAGS="-std=c++17 -stdlib=libc++ -DU_USING_ICU_NAMESPACE=1" \
phpenv install 8.3.7
すると、以下の通り無事にインストールできました。よかったー。
[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-production gets used as php.ini
[Info]: Building 8.3.7 into /Users/xxxxxxxx/.anyenv/envs/phpenv/versions/8.3.7
[Skipping]: Already downloaded and extracted https://www.php.net/distributions/php-8.3.7.tar.bz2
[Preparing]: /var/tmp/php-build/source/8.3.7
[Compiling]: /var/tmp/php-build/source/8.3.7
[xdebug]: Installing version 3.3.1
[Skipping]: Already downloaded http://xdebug.org/files/xdebug-3.3.1.tgz
[xdebug]: Compiling xdebug in /var/tmp/php-build/source/xdebug-3.3.1
[xdebug]: Installing xdebug configuration in /Users/xxxxxxxx/.anyenv/envs/phpenv/versions/8.3.7/etc/conf.d/xdebug.ini
[xdebug]: Cleaning up.
Makefile:245: warning: overriding commands for target `test'
Makefile:136: warning: ignoring old commands for target `test'
[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.8.3.7.20240718194343.log or rebuild with '--verbose' option
[Success]: Built 8.3.7 successfully.
Discussion