PHP7.3.1のビルドでエラーon MacOSX Yosemite(10.10.5)

MacにWordPressの開発環境を構築しています。
ずっとほったらかしでアップデートしていなかったのですが、PHP5.6が近々サポートされなくなるとのことで、新たにPHP7.3.1をビルドしようとしました。

問題(Problem)

PHP7以降でWordPressがmysqlへアクセスするためには、”mysqli”をPHPのビルドオプションで選択してやる必要があります。

--with-mysqli=/MySQL_dir/bin/mysql_config

↑”mysql_config”ファイルへのパスを指定します。

で、以下のように./configureしました。

#インストールのベースディレクトリ
INSTDIR=/Users/userdir/bin

./configure \
--prefix=${INSTDIR}/php-7.3.6  \
--with-apxs2=${INSTDIR}/httpd-2.4.12/bin/apxs \
--with-pcre-dir=${INSTDIR}/pcre2-10.33 \
--with-pcre-regex=${INSTDIR}/pcre2-10.33 \
--with-zlib \
--with-zlib-dir=${INSTDIR}/zlib-1.2.8/lib \
--with-libxml-dir=${INSTDIR}/libxml2-2.9.2 \
--with-config-file-path=${INSTDIR}/php-7.3.6 \--enable-calendar \
--with-jpeg-dir=${INSTDIR}/jpeg-9a \
--with-png-dir=${INSTDIR}/libpng-1.6.17 \
--with-openssl-dir=${INSTDIR}/openssl-1.0.2a \
--with-curl=${INSTDIR}/curl \
--enable-shared=libtool-2.4.6/bin/libtool \
--enable-exif \
--enable-mbstring \
--with-pdo-mysql \
--with-mysqli=${INSTDIR}/mysql-5.6.24/bin/mysql_config \
--with-pear \
--with-gd \
--enable-gd-jis-conv \
--with-iconv-dir=${INSTDIR}/libiconv-1.16 \

からの

make

で、以下のエラーが出てビルドに失敗します。(I got error below.)

clang: warning: argument unused during compilation: '-pthread'
Undefined symbols for architecture x86_64:
  "_res_9_dn_expand", referenced from:
      _php_parserr in dns.o
      _zif_dns_get_mx in dns.o
  "_res_9_dn_skipname", referenced from:
      _zif_dns_get_record in dns.o
      _zif_dns_get_mx in dns.o
  "_res_9_init", referenced from:
      _zif_dns_check_record in dns.o
      _zif_dns_get_record in dns.o
      _zif_dns_get_mx in dns.o
  "_res_9_search", referenced from:
      _zif_dns_check_record in dns.o
      _zif_dns_get_record in dns.o
      _zif_dns_get_mx in dns.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: *** [libs/libphp7.bundle] Error 1

解決方法(solution)

/user/local/lib内にmysqlライブラリ(libmysqlclient.18.dylib)へのシンボリックリンクを張る

/user/localにlibが無い場合は作成する(mkdir if “lib” directory doesn’t exist.)

sudo mkdir /usr/local/lib

リンク作成(make symbolic link to “libmysqlclient.18.dylib” in “/user/local/lib”.)

sudo ln -s /Users/user_dir/bin/MySQL_dir/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib

過程

久しぶりにWordPressを触ることに。
よし、最新のWordPress(5.2.1)にアップデートしよう
どうやら現環境のPHPバージョン(5.6.2)にはインストールできないようだ。
しかもPHP5.6のサポートは近々終了するらしい
では、最新のPHP7.3環境を作ろう
ビルド!
WordPressページにアクセス!!
あれ、何も表示されない。
どうもデータベース(MySQL)にアクセスできていない様子
むむ、最新のPHPではずっと非推奨だったmysql_connect()関数がついに削除されたらしい。
WordPressはMySQLの接続にはPDOかmysqliという手段を使っているようだ。
前のPHP5.6環境からPDOはビルドしていたけど、mysqliはビルドしていなかった。
WordPressのソース覗いてみたところ、mysqliは必須のよう。
よ〜し、オプションmysqliをつけてビルド!!!
エラー、、、orz
何が原因かさっぱりわからず、Apacheを最新版でビルドしたり、MySQL5.7をビルドしたり、
いや、MacOSってビミョーにLinuxとは違うから、MacOS用にビルドされたMySQLをダウンロードしてきて
ライブラリを置き換えてみたらいいんじゃね?と思ってトライするも、やっぱりビルド済みだとパスの設定が
自分の構成している環境と違うから組み込めなくて意味なかったし、
PHP7.0、7.1、7.2をそれぞれビルドしてみたり、
まあ、PHP5.6.40ならWordPress5.2.1使えるし、これでいいんじゃね?とビルドしてWordPress動いたので
これでいいかと妥協してみたり、でもやっぱり納得いかないし、もうすぐそのPHP環境サポートされなくなるから、今使えてても意味なくね?と思い直してみたり。
MacOSのバージョンが古くて(Yosemite:10.10.5)、XCodeがアップデートできていないせいかも、
Mojaveにアップデートしようかな?でも今の環境気に入っているし、ParalleDesktopも買い替えないといけないし、いっそMacBookAirを新しく買おうかな?でも今のスペックと同等構成(メモリ16GB、SSD512GB)
にするといくらだろう、むむ、¥200,800(税別)か。まー、ありかな。でも今年は車検があるのだよ。
ん、やっぱり現環境で何とかしないとな。
いろんなビルドのオプションを追加してみたり、CPPFLAGSやLDFLAGSを設定してみたり、
configureのファイル内容みてみたり、./configureしたあとで、makeするまえにMakefileの内容を修正してみたり、あーでもない、こーでもないとトータルで20時間以上かけて解決に至りました。
(時間かけすぎ?しかし、暇ではないヨ、睡眠時間と休日を捧げただけでアルよ。)

まあ、結論はシンボリックリンク張るだけっていう単純なものだったけど、大変だったのである。