现在的位置: 首页 > 综合 > 正文

在vs2008开发PHP扩展之二–vs2008下PHP扩展项目的建立配置以及生成dll

2013年08月06日 ⁄ 综合 ⁄ 共 2564字 ⁄ 字号 评论关闭

        上面讲了如何搭建PHP开发环境和创建一个PHP扩展骨架。这里讲如何使用vs2008ide来开发我们的PHP扩展。具体如下:

        

1.启动vs2008

2.创建项目

文件-新建-从现有代码创建项目。

选择visual-c++,

找到项目位置F:\php_win\php-5.3.8\ext\test

项目名称php_test,

项目类型:选择“动态链接库dll项目”。

完成即可。

3.配置相关参数

菜单-项目-属性,打开php_test属性页对话框,

在“配置属性"- "C/C++"

 “常规”:附加包含目录:

C:\vc\vc2008compiler\PlatformSDK\Include

C:\vc\vc2008compiler\include

F:\php_win\win32build\include

F:\php_win\win32build

F:\php_win\php-5.3.8

F:\php_win\php-5.3.8\win32

F:\php_win\php-5.3.8\main

F:\php_win\php-5.3.8\TSRM

F:\php_win\php-5.3.8\Zend

“预处理器”:预处理器定义

WIN32
_DEBUG
_WINDOWS
_USRDLL
PHP_TEST_EXPORTS
ZEND_DEBUG=0
COMPILE_DL_TEST
ZTS
ZEND_WIN32
PHP_WIN32
HAVE_TEST=1

在“配置属性"- "链接器"中

“输入”:附加依赖项中添加

F:\php_win\php-5.3.8-nts-Win32-VC9-x86\dev\php5.lib

C:\vc\vc2008compiler\PlatformSDK\Lib\Kernel32.Lib

C:\vc\vc2008compiler\lib\oldnames.lib

C:\vc\vc2008compiler\lib\msvcrtd.lib

要根据扩展名称而定,记得要大写。

这里要去掉:“从父级或项目默认设置继承”的勾选

5.生成DLL

右击php_test项目,选择“生成”

,然后控制打印如下的类似,表示成功,如果有错误,可以自己根据问题进行处理

1>------ 已启动全部重新生成: 项目: php_test, 配置: Debug Win32 ------
1>正在删除项目“php_test”(配置“Debug|Win32”)的中间文件和输出文件
1>正在编译...
1>cl: 命令行 warning D9035 :“Wp64”选项已否决,并将在将来的版本中移除
1>test.c
1>f:\php_win\php-5.3.8\zend\zend_execute.h(70) : warning C4311: “类型转换”: 从“gc_root_buffer *”到“zend_uintptr_t”的指针截断
1>f:\php_win\php-5.3.8\zend\zend_execute.h(70) : warning C4312: “类型转换”: 从“zend_uintptr_t”转换到更大的“gc_root_buffer *”
1>f:\php_win\php-5.3.8\zend\zend_execute.h(230) : warning C4311: “类型转换”: 从“void **”到“zend_uintptr_t”的指针截断
1>f:\php_win\php-5.3.8\zend\zend_execute.h(234) : warning C4267: “函数”: 从“size_t”转换到“int”,可能丢失数据
1>f:\php_win\php-5.3.8\zend\zend_execute.h(291) : warning C4312: “类型转换”: 从“zend_uintptr_t”转换到更大的“void *”
1>f:\php_win\php-5.3.8\zend\zend_execute.h(306) : warning C4312: “类型转换”: 从“zend_uintptr_t”转换到更大的“void *”
1>f:\php_win\php-5.3.8\zend\zend_execute.h(313) : warning C4311: “类型转换”: 从“void *”到“zend_uintptr_t”的指针截断
1>f:\php_win\php-5.3.8\zend\zend_execute.h(326) : warning C4311: “类型转换”: 从“void *”到“zend_uintptr_t”的指针截断
1>正在编译资源清单...
1>Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
1>Copyright (C) Microsoft Corporation.  All rights reserved.
1>正在链接...
1>   正在创建库 Debug\php_test.lib 和对象 Debug\php_test.exp
1>正在嵌入清单...
1>Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
1>Copyright (C) Microsoft Corporation.  All rights reserved.
1>生成日志保存在“file://f:\php_win\php-5.3.8\ext\test\Debug\BuildLog.htm”
1>php_test - 0 个错误,8 个警告
========== 全部重新生成: 成功 1 个,失败 0 个,跳过 0 个 ==========

这样在

F:\php_win\php-5.3.8\ext\test\Debug

目录生成了

php_test.dll

php扩展文件,在大功告成之前,先确保这个扩展是可以用的,接下来部署这个扩展,看看是否正常。

6.部署测试PHP扩展模块

        放到你的phpapache中加载这个扩展,然后运行F:\php_win\php-5.3.8\ext\test\给出的test.php

        如果php环境启动没有报错误,说明我们开发的模块是可以用的php正确php模块。

如果有错误你可以自己找找问题原因,然后逐一解决。

下一篇文章会说说这些可能遇到的问题,当然并不是全部的问题。

抱歉!评论已关闭.