Windows環境でPECL拡張モジュール作成 [2011/07/05]

Windows環境でのPHP Extension(PECL拡張モジュール)作成手順について。
Linuxでの作成手順は多く書いてあるが、Windows用の情報が少なく、環境構築に時間がかかってしまったのでそのまとめ。

■環境
・Windows7
・Apache2
・PHP 5.2.3
・VC++6.0

■前提
・Windows用PHP 5.2.3 がApacheで普通に動作していること
・PHP 5.2.3 のソースがあること
・pearのpecl-genがインストールされていること

■準備
pecl-genにて『Hello World』を表示するソースを生成
・hello.c
・php_hello.h

■手順
・VC++にて『Win32 Dynamic-Link Library』プロジェクトを作成。プロジェクト名『hello』
・hello.c、php_hello.h をプロジェクトに追加する。

pecl01.png

・次にプロジェクトの設定を変える
☆『C/C++』タブ
・一般にてデバッグ情報を『プログラムデータベースを使用』にする
pecl02.png

・コード生成にて使用するランタイムライブラリを『マルチスレッド(DLL)』にする
pecl03.png

・プリコンパイル済みヘッダーを『使用しない』にする
pecl04.png

・プリプロセッサにて
PHP_WIN32
ZEND_WIN32
ZTS=1
ZEND_DEBUG=0
HELLO
COMPILE_DL_HELLO

をカンマ区切りで追加する。

・インクルードファイルのパスを設定する
C:\php-work\php-src
C:\php-work\php-src\main
C:\php-work\php-src\Zend
C:\php-work\php-src\TSRM
C:\php-work\php-src\regex

をカンマ区切りで追加する。

pecl05.png

☆『リンク』タブ
・c:\php\dev\php5ts.lib をモジュールに追加

pecl06.png


■ビルド
29KBくらいのhello.dll が生成されるので、ext フォルダにコピー。
apacheを再起動し、phpinfoに表示されることを確認

■注意
ビルドはすぐに通るようになるが、コンパイルオプションを正しく設定しないとNGで、phpinfoに表示されない。apacheのログに
PHP Warning: PHP Startup: Invalid library (maybe not a PHP library) 'hello.dll' in Unknown on line 0
と出てしまう。

■参考
http://gihyo.jp/dev/serial/01/php-module/0002
http://archive.devnewz.com/090902b.html
http://blog.slickedit.com/2007/09/creating-a-php-5-extension-with-visual-c-2005/