您好,欢迎访问一九零五行业门户网

windows下用c/c++开发php扩展

一:所需工具:
cygwin ,它是一个在windows平台上运行的类unix模拟环境
php源码(压缩包)
php二进制文件,也就是安装在windows上的php
vs2008 或者更高(vs2010,vs2013)
win32build.rar和bindlib_win32.rar(主要用来生成config.win32.h)
二:配置过程
1: 解压php源码,里面有一个ext目录,这里便是负责开发php扩展的目录,目录中有默认的所有扩展源码,还有两个文件,
ext_skel_win32.php 和 ext_skel文件
ext_skel是创建扩展的shell,在windows上无法运行,所以必须要有cygwin模拟unix环境
2:解压完之后,我们需要在ext目录中生成我们自己的扩展目录.
我们直接win+r cmd 进入命令行,然后cd 跳转到ext目录,输入以下指令:
php ext_skel_win32.php –extname=myext 或者
php.exe ext_skel_win32.php –extname=myext
这里很容易出现错误
首先:php和php.exe指的是安装在windows上的php,它的根目录里面有php.exe,目的是用来解析php文件,所以我们需要将安装的php目录设置到环境变量中。
其次:如果没有安装cygwin或者没有设置cygwin,就会出现以下错误。所以 ,我们需要安装cygwin,然后打开php源码ext目录中的ext_skel_win32.php ,里面有一个变量叫$cygwin_path = “c:/cygwin/bin”; 将它修改为你安装的目录并保存,try again
如果依旧报错,请看这张图,你是否犯错了。
一切完成之后 如果出现以下情况,则表明创建扩展目录(骨架)成功,
里面包含的目录大概是这个样子,其中我们需要修改的两个文件是(如箭头所示)
3:添加依赖的php5ts.lib
将php二进制包中的dev目录下的php5ts.lib拷贝到你的扩展目录中
4:(1)修改php_hello.h文件
扩展新的函数:在php_function(confirm_myhello_compiled);行后添加一行 php_function(hello);
(2)修改hello.c 文件
在数组zend_function_entry myhello_functions[]增加一行
1. zend_function_entry myhello_functions[] = { 2. php_fe(confirm_myhello_compiled, null) /* for testing, remove later. */ 3. php_fe(hello, null) // 新增的行 4. {null, null, null} /* must be the last line in myhello_functions[] */ 5. };
在php_function(confirm_myhello_compiled) 后添加我们的新函数
1. php_function(hello){ 2. php_printf(”hello c extension”); 3. } 4.
5:构建dll扩展文件
接下来就是编译扩展文件了,用vs2008打开hello.dsp,选择编译方式为release_ts,然后开始编译,或者在通过命令行进入ext/hello 执行 msdev hello.dsp /make “hello - win32 release_ts” 如果成功,则会在ext同级目录release_ts中生成php_hello.dll。
到这里基本主要任务基本完成了,但是这里也是最容易出错误的。
最常见的错误 ,编译时它会出现cannot open include file “../main/config.win32.h” 结果到main文件夹根本就没这个文件。
所以,将win32build.rar和bindlib_win32.rar都解压到php源码中win32/build目录下,并将win32/build添加到环境变量
进入cmd 跳转到php源码目录,输入
cscript /nologo configure.js –with-php-build=”../win32build” –without-libxml –disable-odbc 回车后有可能出现
意思是没有找打cl.exe,所以我们需要将安装好的vs2008目录中的的bin目录添加到环境变量,我的机器上是”d:\vs2008\vc\bin”,再次执行,有可能依旧会报错,图我找不到了。。大概意思就是the c++ compiler is vc9.0(vs2008) at least 所以尽量使用vs2008以上的compiler
继续执行:
这个文件可以在microsoft visual studio 10.0\common7\ide目录下找到,复制到vc\bin目录下即可。继续执行语句,成功。在d:\php源码\main目录下生成config.win32.h文件。
打开config.win32.h:找到里面
如果你用vc10进行编译,则需修改为
终于解决问题了,编译。。如果成功,生成dll,
但是我还是遇见了编译问题,fatal error c1902:程序数据库管理器不匹配。。
真是苦了,通过百度,在csdn论坛上发现同样的问题,最后是这样解决的。
mspdbsrv.exe 或 mspdbcore.dll 丢失或者其版本和 mspdb80.dll 的版本不同,确定这三个文件的相同版本安装在系统里。
在vc安装目录下的\common7\ide 目录下拷贝这三个文件到 安装目录下的vc\bin下即可
所有问题解决,我也成功编译出了php_hello.dll
6:最后,我们将其拷贝到二进制php目录下的ext目录,打开php.ini,添加上 extension=php_hello.dll
重启apache,测试自己的函数。
ps:当时我测试的函数是cock()
输出结果:
到此结束。。。搞这个东西真是快疯了,还好耐心的解决问题多次尝试,最终成功。我将自己所遇到的问题都贴了出来方便大家参考。php扩展这东西挺好玩的,我们可以开发自己的php函数。不过前提是c/c++要学的很好。。。总之慢慢来吧,祝大家早日成功~
以上就介绍了windows下用c/c++开发php扩展,包括了方面的内容,希望对php教程有兴趣的朋友有所帮助。
其它类似信息

推荐信息