前幾天需要在 Windows 上安裝 php-zmq 擴充套件, 奈何尋遍網路找不到為 PHP 7.4 編譯好的 DLL, 只好自行編譯.

編譯過程參考了 Build your own PHP on Windows[1]How to build PHP Extension on Windows[2].

準備工作

  1. 首先需要安裝 Visual C++ Build Tools 2017.

https://aka.ms/vs/15/release/vs_buildtools.exe 下載安裝檔案.

執行下面的指令進行安裝.

1
> .\vs_buildtools.exe --quiet --wait --norestart --nocache --installPath C:\BuildTools --add  Microsoft.VisualStudio.Workload.VCTools

上述指令系自動安裝, 不會顯示任何視窗, 如需瞭解安裝進度可將 --quiet 刪掉

  1. 下載 PHP-SDK 並解壓縮, 目錄結構如下.
1
2
3
4
5
6
php-sdk
|-bin
|-lib
|-msys2
|-pgo
...
  1. 準備 SDK
1
2
> .\phpsdk-starter.bat -c vc15 -a x64
$ phpsdk_buildtree php-dev
  1. 下載 PHP 程式碼 並解壓縮, 目錄結構如下.
1
2
3
4
php-sdk
|-vc15
|-x64
|-php-7.4.4-src
  1. 準備程式庫
1
2
3
4
$ cd vc15\x64\php-7.4.4-src
$ phpsdk_deps -u
...
Updates performed successfully.
  1. 編譯 PHP
1
2
3
4
5
6
$ buildconf
$ configure --disable-all --enable-cli # ZTS, 若需 NTS 使用下面一行
$ configure --disable-all --enable-cli --disable-zts # NTS, 若需 ZTS 使用上面一行
...
Type ‘nmake’ to build PHP
$ nmake

編譯擴充套件

  1. 下載 PHP-ZMQ 程式碼 並解壓縮, 目錄結構如下.
1
2
3
4
5
6
7
8
9
php-sdk
|-vc15
|-x64
|-php-7.4.4-src
|-ext
|-zmq
|-config.m4
|-config.w32
...
  1. 下載 ZeroMQ 程式碼ZeroMQ Visual Studio 15 2017 x64 並解壓縮, 目錄結構如下.
1
2
3
4
5
6
7
8
9
10
php-sdk
|-vc15
|-x64
|-deps
|-bin
|-libzmq-v141-mt-4_3_2.dll
|-include
|-zmq.h
|-lib
|-libzmq.lib <- libzmq-v141-mt-4_3_2.lib
  1. 編譯 PHP-ZMQ
1
2
3
4
5
6
7
$ nmake clean
$ buildconf --force # 重建 configure, 新增 --with-zmq
$ configure --disable-all --enable-cli --with-zmq=shared # ZTS, 若需 NTS 使用下面一行
$ configure --disable-all --enable-cli --with-zmq=shared --disable-zts # NTS, 若需 ZTS 使用上面一行
...
Type ‘nmake’ to build PHP
$ nmake

編譯成功的 php_zmq.dll 在:

1
2
php-sdk\php-dev\vc15\x64\php-7.4.4-src\x64\Release_TS\php_zmq.dll # ZTS
php-sdk\php-dev\vc15\x64\php-7.4.4-src\x64\Release\php_zmq.dll #NTS

編譯成果在 zeromq/php-zmq#193

使用擴充套件

php_zmq.dll 放到 php/ext, 將 libzmq-v141-mt-4_3_2.dll 放到 php, 然後在 php.ini 新增:

1
extension=zmq

  1. https://wiki.php.net/internals/windows/stepbystepbuild_sdk_2

  2. https://medium.com/@erinus/how-to-build-php-extension-on-windows-d1667290f809