window編譯c開發的php擴展

php擴展在linux下面開發最是方便,對編譯問題不用太頭疼。但我現在工作使用的系統是window,只能在window下折騰。現在把window下面編譯遇到的問題,做下記錄。

有關在window下面使用C語言開發php擴展請參考下面博客:

http://koda.iteye.com/blog/315779

採用的編譯工具vc6,個人比較喜歡使用命令行編譯:
msdev myhello\myhello.dsp /MAKE "myhello - Win32 Release_TS" 
可以使用批處理簡化此命令:
msdev %1 /MAKE "%2 - Win32 Release_TS"
%1%2對應參數1參數2,保存make.bat文件名。然後將路徑加入到系統環境,就可以進入ext目錄使用
make myhello\myhello.dsp myhello 進行編譯了,這裏的myhello是你的項目名


編譯中遇到的問題如下:

1.缺少config.w32.h頭文件

下載2個必要的包
http://www.php.net/extra/bindlib_w32.zip
http://www.php.net/extra/win32build.zip
把這2個包的內容放一起,解壓縮到X:\win32build,X是你的硬盤分區。將X:\win32build\bin加入系統環境變量。
命令行輸入:set path=%path%;X:\win32build\bin
然後進入到php源碼根目錄執行buildconf.bat
提示:
Rebuilding configure.js
Now run 'cscript /nologo configure.js --help'
執行:cscript /nologo configure.js --with-php-build="../win32build" --without-libxml  --disable-odbc

上面的參數務必補齊,不然出現一些錯誤也麻煩。等到
出現
Creating build dirs...
Generating files...
Generating Makefile
Generating main/internal_functions.c
Generating main/config.w32.h
Done.

config.w32.h就成功生成了

2.php_stream_transport.h 頭文件報錯,error如:
.\..\main\streams/php_stream_transport.h(85) : error C2143: syntax error : missing ')' before '*'
..\..\main\streams/php_stream_transport.h(85) : error C2081: 'socklen_t' : name in formal parameter list illegal

是由於找不到宏報的語法錯誤。打開這個文件,添加typedef int socklen_t,問題解決。


3.擴展加載錯誤,如圖:

在php_stream_transport.h 裏面加一行,定義PHP_COMPILER_ID="vc9"就把apache忽弄過去了。

#define PHP_COMPILER_ID "VC9"

問題至此解決。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章