php 扩展开发
下载对应版本php源码
windows:
buildconf
configure
1、注意你的头文件的包含的顺序。
将你的头文件以及Windows和C++的头文件包含在php头文件的前面
#include "xxxx.h" // 你的头文件 extern "C"{ #include "zend_config.w32.h" #include "php.h" #include "ext/standard/info.h" #include "Main.h" }
2.可能遇到error C2466: 不能分配常量大小为0 的数组
解决方法:
在vc的 c:\program files\microsoft visual studio 8\vc\include\malloc.h 文件中找到: #define _STATIC_ASSERT(expr) typedef char __static_assert_t[ (expr) ] 将这一行改为: #ifdef PHP_WIN32 #define _STATIC_ASSERT(expr) typedef char __static_assert_t[ (expr)?(expr):1 ] #else #define _STATIC_ASSERT(expr) typedef char __static_assert_t[ (expr) ] #endif
或者直接在你的cpp文件中定义也可以。
2. 如果遇到2019连接错误,那么通常是没有删除预处理定义中的宏LIBZEND_EXPORTS
由于生成的PHPTest.dll 与PHP安装环境不一致导致,解决方法(非常重要)
为了解决这个问题走了很多弯路,开始以为是PHP源码版本的问题,下载了很多个版本都没成功,浪费了很多时间
解决很简单:在php_src\main\config.w32.h文件中增加 #define PHP_COMPILER_ID "VC9"用VC9编译
生成错误:
error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MT_StaticRelease”不匹配值“MD_DynamicRelease”
解决:
在工程上右键-》属性-》c/c++-》代码生成-》运行库
改成(release为MT,debug为MTD),如果有多个工程(主工程中包含动态或者静态链接库工程)都得同样设置。即可解决!
发现::
上面方法不行啊!!!!!!!!!!!!!!!!
在工程上右键-》属性-》c/c++-》代码生成-》运行库
因为所选的工程运行库选择错误导致的。
其中四个选项的对应含义如下:
多线程调试Dll (/MDd) 对应的是MD_DynamicDebug
多线程Dll (/MD) 对应的是MD_DynamicRelease
多线程(/MT) 对应的是MD_StaticRelease
多线程(/MTd)对应的是MD_StaticDebug
这种问题,根据所给的提示,修改成对应的运行库就可以了
error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MT_StaticRelease”不匹配值“MD_DynamicRelease”