標籤:c a tar ext int com
本文的環境是windows下開發php版本5.3
1、下載php5.3的源碼包和php5.3的二進位包(平時使用的php程式包)
2、下載cygwin,並預設安裝在c:\cygwin,因為產生php擴充架構的程式需要cygwin
3、假設php擴充的工作目錄為d:\php,解壓源碼包和二進位包到這個目錄
4、cmd命令列在d:\php\ext目錄中運行 php ext_skel_win32.php --extname=yourext (如果php.exe程式的路勁未加入系統內容變數則需要自己指定路徑)
5、如果順利的話應該在ext目錄下產生了yourext的目錄了,目錄中有個xmltpm.sln的檔案,用vs2008(也就是vs9)開啟,貌似我用vc6開啟編譯有很多編譯錯誤,可能因為官網上說明php5.3對應vc2008導致的
6、現在加入自己的第一個函數,在yourext.h中找到PHP_FUNCTION(confirm_yourext_compiled);/* For testing, remove later. */ 這一行,在下面加入PHP_FUNCTION(your_func); 代表聲明了your_func的函數
7、在yourext.c中找到PHP_FE(confirm_yourext_compiled,NULL)/* For testing, remove later. */ 下面加上 PHP_FE(your_func,NULL)
8、在yourext.c中找到PHP_FUNCTION(confirm_yourext_compiled) 下面加上
PHP_FUNCTION(your_func)
{
php_printf("Hello, php ext");
}
這樣就完成了一個函數的添加
9、現在開始編譯,菜單->產生,應該會提示找不到..\main\config.w32.h,在d:\win32\build\config.w32.h.in 到d:\php\main目錄下並改名為config.w32.h
然後需要複製d:\php\dev\php5ts.lib 到d:\php\ext\yourext 目錄
順利的話應該可以編譯成功了,至少我編譯成功了
10、因為我編譯的是非安全執行緒版本的,所以需要修改工程屬性-》配置屬性-》c/c++-》前置處理器 刪除前置處理器定義裡的ZTS=1,
然後必須在 d:\php\main\config.w32.h 加上一句#define PHP_COMPILER_ID "VC9"
否則會出現下面的錯誤
PHP Warning: PHP Startup: yourext: Unable to initialize module
Module compiled with build ID=API20090626,NTS
PHP compiled with build ID=API20090626,NTS,VC9
These options need to match
in Unknown on line 0