🐘

[Mac] phpenv(php-build)でPHP 8.0.0をインストールする方法

2020/12/09に公開

はじめに

phpenvによるPHPのインストールは、インストールしようとするバージョンによって細かい対応が必要な場合があります。

以下のページに本ブログ内の関連記事をまとめていますので、必要に応じてご参照ください🙏

[2020年末版] Macでのphpenv(php-build)によるPHP 5.6〜8.0のインストール方法まとめ

phpenv(php-build)でPHP 8.0.0をインストールしようとしたら implicit declaration of function 'gdPngGetVersionString' というエラーになった

先日めでたくPHP 8.0.0がリリースされ、php-buildからも利用可能になりました 🎉

早速インストールしようとしてみたところ、

[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.0.0 into /Users/ttskch/.phpenv/versions/8.0.0
[Skipping]: Already downloaded and extracted https://secure.php.net/distributions/php-8.0.0.tar.bz2
[Preparing]: /var/tmp/php-build/source/8.0.0
[Compiling]: /var/tmp/php-build/source/8.0.0

-----------------
|  BUILD ERROR  |
-----------------

Here are the last 10 lines from the log:

-----------------------------------------
/var/tmp/php-build/source/8.0.0/ext/gd/gd.c:521:48: error: implicit declaration of function 'gdPngGetVersionString' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
        php_info_print_table_row(2, "libPNG Version", gdPngGetVersionString());
                                                      ^
/var/tmp/php-build/source/8.0.0/ext/gd/gd.c:521:48: note: did you mean 'gdVersionString'?
/usr/local/include/gd.h:1630:27: note: 'gdVersionString' declared here
BGD_DECLARE(const char *) gdVersionString(void);
                          ^
2 errors generated.
make: *** [ext/gd/gd.lo] Error 1
make: *** Waiting for unfinished jobs....
-----------------------------------------

The full Log is available at '/tmp/php-build.8.0.0.2020xxxxxxxxxx.log'.
[Warn]: Aborting build.

というエラーに。

今回はこれを解消してインストールするために必要なことを説明します✋

結論:Homebrewでインストールしたgdを使うようにすればインストールできる

ちょっと詳細まで理解していませんが、コンパイルオプションに以下を追加して、Homebrewでインストールしたgdを使うようにすればインストールできました。

--with-external-gd=/usr/local/opt/gd

参考:https://www.php.net/manual/ja/image.installation.php

ちなみに僕の環境ではgdのバージョンは2.3.0です。

$ brew info gd
gd: stable 2.3.0 (bottled), HEAD

実際のインストールコマンド

今回僕が実際に実行したインストールコマンドは以下です。

export PATH=/usr/local/opt/bison/bin:$PATH
export PKG_CONFIG_PATH=/usr/local/opt/krb5/lib/pkgconfig:/usr/local/opt/openssl/lib/pkgconfig:/usr/local/opt/icu4c/lib/pkgconfig:/usr/local/opt/libedit/lib/pkgconfig:/usr/local/opt/libxml2/lib/pkgconfig
export PHP_BUILD_INSTALL_EXTENSION="apcu=@ imagick=@"
export PHP_BUILD_EXTRA_MAKE_ARGUMENTS=-j4
export PHP_BUILD_CONFIGURE_OPTS="--with-zlib-dir=/usr/local/opt/zlib --with-bz2=/usr/local/opt/bzip2 --with-iconv=/usr/local/opt/libiconv --with-curl=/usr/local/opt/curl --with-libedit=/usr/local/opt/libedit --with-jpeg-dir=/usr/local/opt/libjpeg --with-png-dir=/usr/local/opt/libpng --with-external-gd=/usr/local/opt/gd"
phpenv install 8.0.0

ちなみに環境は以下のとおり。

  • macOS Big Sur 11.0.1
  • Xcode 12.2
  • phpenv v0.9.0-rc.1
  • php-build v0.11.0dev
GitHubで編集を提案

Discussion