在Win32下用VS2008编译PHP扩展

  使用VC2008来打开mytest.dsp,它提示要转换工程。

  然后将mytest.c改名字为mytest.cpp,将里面的

  #include “php.h”

  #include “php_ini.h”

  #include “ext/standard/info.h”

  #include “php_mytest.h”

  用extern “C”括起来:

  extern “C”

  {

  #include “php.h”

  #include “php_ini.h”

  #include “ext/standard/info.h”

  #include “php_mytest.h”

  };

  还要将

  #ifdef COMPILE_DL_MYTEST

  ZEND_GET_MODULE(mytest)

  #endif

  也括起来

  #ifdef COMPILE_DL_MYTEST

  extern “C”

  {

  ZEND_GET_MODULE(mytest)

  };

  #endif

  设置工程属性页中的C++->代码生成->运行库改为多线程DLL(/MD),将C++->高级->编译为改为编译为C++代码(/TP),链接器->附加库目录加一项PHP二进制包的dev目录。

  处理完这些后,还要修改PHP源码中Zend/Zend.h,将

  #include

  移动到

  #ifdef ZEND_WIN32

  # include “zend_config.w32.h”

  # define ZEND_PATHS_SEPARATOR ‘;’

  #elif defined(NETWARE)

  # include

  # define ZEND_PATHS_SEPARATOR ‘;’

  #elif defined(__riscos__)

  # include

  # define ZEND_PATHS_SEPARATOR ‘;’

  #else

  # include

  # define ZEND_PATHS_SEPARATOR ‘:’

  #endif

  的后面去。 还要修改zend_config.w32.h,将

  #define vsnprintf _vsnprintf

  这行注释掉,这样就可以正常编译了(按Release_TS编译),在PHP源码目录下的Release_TS目录下生成了 php_mytest.dll,将其拷贝到PHP二进制文件目录下的ext目录中,修改其php.ini文件,加上 extension=php_mytest.dll,在命令行用php -i命令来查看模块是否加载成功了:

  mytest

  mytest support => enabled

  ==========================================================

  Q1: 如果在编译时遇到这样的警告

  warning C4273: “getwchar”: dll 链接不一致

  warning C4273: “putwchar”: dll 链接不一致

  warning C4005: “_WIN32_WINNT”: 宏重定义

  这是因为路径设置的问题,本人对VS2008不太熟悉,在同事帮助下解决这个问题:

  设置工程属性页-》链接器-》输入-》附加依赖项 把php5ts.lib设置成绝对路径后,

  再编译即可成功!


       当.h文件里有函数实现时

VS2008编译器报此错误,
解决方法 
1.在.h里的函数声明前加 inline
2.在项目->属性->链接器->命令行->附加选项中加   /force   
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值