window7下编译php5.3扩展

来源:互联网 发布:淘宝新手如何提高销量 编辑:程序博客网 时间:2024/05/18 18:04
编译作业糸统:WIN7
编译器:VC10 
http://www.visualstudio.com/downloads/download-visual-studio-vs页面选择Microsoft Visual C++ 2010 Express下载
安装后将D:\Microsoft Visual Studio 10.0\VC\bin添加到电脑的环境变量中,这里D:\Microsoft Visual Studio 10.0是我 Microsoft Visual C++ 2010 Express的安装目录。

IDE:Code::Blocks
PHP5.3是用VC9编译的,WIN7下能用的免费编译器,微软官网能下到的最低版本就VC10。我是不会Microsoft Visual C++ 2010 Express编译VC9的工程,所以用Code::Blocks
下载在http://www.codeblocks.org/downloads/binaries,选择codeblocks-13.12-setup.exe
安装时,程序会检测到Microsoft Visual Studio 10编译器,将其作为默认codeblocks的编译器。


源文件:php-5.3.28-src
我接触的window服务器下跑的PHP,一般都是5.3版本的。
下载在http://windows.php.net/downloads/releases/php-5.3.28-src.zip
下载后解压到某目录下,我这里将其解压到了H:\php-5.3.28-src

二进制文件:php-5.3.28-Win32-VC9-x86 
下载在http://windows.php.net/downloads/releases/
下载后解压到H:\php-5.3.28-src,相同的文件选择覆盖即可。

SDK文件:php-sdk-binary-tools-20110915.zip
下载在http://windows.php.net/downloads/php-sdk/php-sdk-binary-tools-20110915.zip
下载后解压到某目录下,我这里将其解压到了H:\phpsdk。
将解压后的bin目录添加到系统变量。


步骤:
1:命令行环境下进入H:\php-5.3.28-src

2:在源码目录执行buildconf.bat

3:将生成main/config.win32.h文件
输入cscript /nologo configure.js --with-php-build="../win32build" --without-libxml  --disable-odbc
如果报错误,提示缺少dll文件,mspdb100.dll文件可在D:\Microsoft Visual Studio 10.0\Common7\IDE目录下找到,复制到D:\Microsoft Visual Studio 10.0\VC\bin 目录下即可。如果提示没发现某些exe,那时因为H:\phpsdk\bin这个系统变量没起作用,(ps:我添加了这个系统变量没起作用,不知道什么原因)可以在命令行输入:set path=%path%;H:\phpsdk\bin解决这个问题。

也可以简单成这样
configure  //线程安全版本
或者
configure --disable-zts //非线程安全版本 
以上完事后,到H:\php-5.3.28-src\main下就会看到config.win32.h文件,因为我下的是php-5.3.28-Win32-VC9-x86,这是用VC9编译的,而我现在的编译器是VC10,所以要修改下config.win32.h文件里的编译器定义
找到
/* Detected compiler version */
#define COMPILER "MSVC10 (Visual C++ 2010)"
将其修改为
/* Detected compiler version */
#define COMPILER "MSVC9 (Visual C++ 9.0)"
找到
/* Compiler compatibility ID */
#define PHP_COMPILER_ID "VC10"
将其修改为
/* Compiler compatibility ID */
#define PHP_COMPILER_ID "VC9"
(ps:我不确定这样,Visual C++ 2010就允许降级编译为VC9的格式,不过最终编译的扩展DLL还是能在VC9下的PHP中执行。)

4:进入H:\php-5.3.28-src\ext目录,复制skeleton文件夹并重命名为hello

5:进入H:\php-5.3.28-src\ext\hello目录,将php_skeleton.h、skeleton.c、skeleton.dsp,分别重命名为php_hello.h、hello.c、hello.dsp。
并将这3个文件中的所有'extname'替换为'hello','EXTNAME'替换为‘HELLO’,注意匹配大小写。

6:编辑php_hello.h文件
  找到
  PHP_FUNCTION(confirm_hello_compiled); /* For testing, remove later. */
  紧挨在这行下可以定义一个自己的函数了,这里定义一个test函数
  PHP_FUNCTION(test); 

7:编辑hello.c文件
  找到
  PHP_FE(confirm_hello_compiled, NULL) /* For testing, remove later. */
  紧挨在这行下添加如下
  PHP_FE(test, NULL)
  找到
  PHP_FUNCTION(confirm_hello_compiled){
      此处省略.....
  }
  在这个函数体后定义自己要定义的函数体
  PHP_FUNCTION(test){
     此处省略.....
  }

8: 将H:\php-5.3.28-src\dev\php5ts.lib(或许是php5.lib,非线程安全版的)拷贝到hello目录下。

9:如果你懂Microsoft Visual C++ 2010 Express工具的用VS2010打开hello.dsp工程,进行工程转换并生成dll文件。
 生成的扩展dll文件为:H:\php-5.3.28-src\Release_TS\php_hello.dll。
 这里可能会出现问题:fatal error C1902: 程序数据库管理器不匹配;请检查安装解决。
      解决办法:找到D:\Microsoft Visual Studio 10.0\Common7\IDE目录下的msobj100.dll、mspdbcore.dll、mspdbsrc.exe
拷贝到D:\\Microsoft Visual Studio 10.0\VC\bin目录下。
我不熟悉Microsoft Visual C++ 2010 Express工具,就用Code::Blocks打开hello.dsp工程,然后编译生成php_hello.dll
10:将php_hello.dll拷贝到要扩展的PHP的\ext目录下,然后修改其php.ini文件,打开PHP扩展选项
添加
         extension=php_hello.dll
以上完事就可以在php页面调用php_hello.dll扩展库里的函数test了




参考网址:
http://www.tuicool.com/articles/3AJRZn
http://blog.csdn.net/qian_f/article/details/27205567

0 0
原创粉丝点击