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”

 

posted @ 2020-06-22 19:58  jiangcheng_15  阅读(217)  评论(0编辑  收藏  举报