More Related Content Similar to Windows で拡張モジュールをビルドしてみた Similar to Windows で拡張モジュールをビルドしてみた (20) Windows で拡張モジュールをビルドしてみた2. 自己紹介
内山 雄司 (@y__uti)
◦ http://y-uti.hatenablog.jp/ (phpusers-ja)
仕事
◦ 受託開発の会社 (株式会社ピコラボ) でプログラマをしています
興味
◦ プログラミング言語処理系
◦ 機械学習
2016-03-30 第100回 PHP 勉強会 2
4. PECL 拡張の導入
二通りの方法
1. バイナリをインストール
2. ソースコードをビルド
2016-03-30 第100回 PHP 勉強会 4
Linux Mac Windows
バイナリ yum, apt, ... DLL を直接取得
ソースコード phpize, make ?
OS 別の導入方法
◦ Mac は使ったことがないのでわかりません
8. Windows で phpize を使う
ここから php-devel-pack を取得
◦ http://windows.php.net/downloads/releases/
2016-03-30 第100回 PHP 勉強会 8
10. ビルド - 環境設定
Visual Studio 2015 開発者コマンドプロンプトで実行
2016-03-30 第100回 PHP 勉強会 10
C:¥Program Files (x86)¥Microsoft Visual Studio 14.0>cd VC
C:¥Program Files (x86)¥Microsoft Visual Studio 14.0¥VC>vcvarsall.bat amd64
C:¥Program Files (x86)¥Microsoft Visual Studio 14.0¥VC>cd ¥opt¥php-sdk
C:¥opt¥php-sdk>bin¥phpsdk_setvars.bat
◦ PHP のバージョンに応じた Visual Studio が必要です
◦ PHP 5.6 なら Visual Studio 2012
参照: "Supported compilers to build PHP on Windows"
◦ https://wiki.php.net/internals/windows/compiler
11. ビルド - phpize
Visual Studio 2015 開発者コマンドプロンプトで実行
2016-03-30 第100回 PHP 勉強会 11
C:¥opt¥php-sdk>cd ¥opt¥geospatial-master
C:¥opt¥geospatial-master>¥opt¥php-7.0.4-devel-VC14-x64¥phpize.bat
Rebuilding configure.js
C:¥opt¥php-7.0.4-devel-VC14-x64
module ...
Now run 'configure --help'
12. ビルド - configure
Visual Studio 2015 開発者コマンドプロンプトで実行
2016-03-30 第100回 PHP 勉強会 12
C:¥opt¥geospatial-master>configure.bat --enable-geospatial
...
Enabled extensions:
-----------------------
| Extension | Mode |
-----------------------
| geospatial | shared |
-----------------------
----------------------------------------------
| | |
----------------------------------------------
| Build type | Release |
| Thread Safety | No |
| Compiler | MSVC14 (Visual C++ 2015) |
| Architecture | x64 |
| Optimization | PGO disabled |
| Static analyzer | disabled |
----------------------------------------------
Type 'nmake' to build PHP
13. ビルド - nmake
Visual Studio 2015 開発者コマンドプロンプトで実行
2016-03-30 第100回 PHP 勉強会 13
C:¥opt¥geospatial-master>nmake
...
ライブラリ C:¥opt¥geospatial-master¥x64¥Release¥php_geospatial.lib とオブ
ジェクト C:¥opt¥geospatial-master¥x64¥Release¥php_geospatial.exp を作成中
EXT geospatial build complete
◦ x64¥Release フォルダに DLL ファイルが出力される
14. 動作確認
東京 - 札幌の距離
2016-03-30 第100回 PHP 勉強会 14
<?php
$tokyo = ['type' => 'Point', 'coordinates' => [139.69, 35.69]];
$sapporo = ['type' => 'Point', 'coordinates' => [141.35, 43.06]];
var_dump(haversine($sapporo, $tokyo));
C:¥>php -d extension=C:¥opt¥geospatial-
master¥x64¥Release¥php_geospatial.dll test.php
float(832715.80874697)
拡張を有効にして計算してみる
16. nmake install の罠
デフォルトのインストール先は C:¥php
変更するには PECL 拡張を configure するときに指定
2016-03-30 第100回 PHP 勉強会 16
C:¥opt¥geospatial-master>configure.bat --with-prefix=C:¥opt¥php¥7.0.4 --
enable-geospatial
◦ --with-prefix オプション
まぁ、指定しなくても手作業で DLL ファイルを置けば済む話
17. nmake test の罠
Makefile に test ターゲットが存在しない
2016-03-30 第100回 PHP 勉強会 17
C:¥opt¥geospatial-master>nmake test
Microsoft(R) Program Maintenance Utility Version 14.00.23506.0
Copyright (C) Microsoft Corporation. All rights reserved.
NMAKE : fatal error U1073: 'test' のビルド方法が指定されていません。
Stop.
まぁ、テストしなければ済む話
19. テストしたい
run-tests.php を直接叩く
2016-03-30 第100回 PHP 勉強会 19
C:¥opt¥geospatial-master>php run-tests.php -p C:¥opt¥php¥7.0.4¥php.exe -n
-d ext
ension=C:¥opt¥geospatial-master¥x64¥Release¥php_geospatial.dll
◦ PHP 本体の Makefile を読むと、実際このように実行している
20. --enable-debug の罠
--enable-debug を指定しても Release ビルドになる
2016-03-30 第100回 PHP 勉強会 20
C:¥opt¥geospatial-master>configure.bat --enable-geospatial --enable-debug
...
Enabled extensions:
-----------------------
| Extension | Mode |
-----------------------
| geospatial | shared |
-----------------------
----------------------------------------------
| | |
----------------------------------------------
| Build type | Release |
| Thread Safety | No |
| Compiler | MSVC14 (Visual C++ 2015) |
| Architecture | x64 |
| Optimization | PGO disabled |
| Static analyzer | disabled |
----------------------------------------------
Type 'nmake' to build PHP
21. デバッグビルドしたい
phpize した後、configure.js スクリプトを修正する
2016-03-30 第100回 PHP 勉強会 21
// ARG_ENABLE('debug', 'Compile with debugging symbols', "no");
...
try {
ARG_ENABLE('debug', 'Compile with debugging symbols', "no");
} catch (e) {
STDOUT.WriteLine("problem: " + e);
}
同じのがある
ここをコメントアウトする
◦ 行番号は PHP のバージョンによって異なる
◦ ファイルの末尾の方
22. まとめ
Windows でも phpize できた
いくつかの些細な問題
◦ nmake install のインストール先
◦ nmake test できない
◦ --enable-debug できない
2016-03-30 第100回 PHP 勉強会 22