window7下编译php5.3扩展

编译作业糸统: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的安装目录。推荐一个下载地址 https://msdn.itellyou.cn/
 
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版本的。
下载后解压到某目录下,我这里将其解压到了H:\php-5.3.28-src
 
二进制文件:php-5.3.28-Win32-VC9-x86 
下载后解压到H:\php-5.3.28-src,相同的文件选择覆盖即可。
 
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了
 
 
 
 
参考网址:
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值