看到如上的输出提示 , 则说明我们创建的 PHP 扩展生成成功了 。以上输出如下所示:
文章插图
此时 , 在 ext 目录下生成了 loaddll 的目录 , 该目录是生成出的 PHP 的扩展模板 , 可以在模板的基础上进行开发 。
使用 VS2015 创建扩展项目
打开 VS2015 , 我这里使用的是 VS2015 , 其他开发环境没有进行测试 。
在 VS2015 中选择 “文件” -> “新建” -> “从现有代码创建项目” , 来创建 PHP 扩展的解决方案 , 如下图:
文章插图
选择了 “从现有代码创建项目” 后 , 会出现创建项目的向导 , 如下图:
文章插图
直接点击 “下一步” , 到如下图:
文章插图
在此步骤 , 选择刚才生成的扩展模板的目录 , 然后填入项目名称 , 这里是“loaddll” , 点击“下一步” , 到达如下图:
文章插图
此步骤选择DLL项目 , 点击下一步 , 到达如下图:
文章插图
直接点击“下一步” , 到达如下图:
文章插图
点击“完成” , 等待 VS2015 开始创建项目 。
配置编译选项并编译项目
在 VS2015 生成项目完毕后 , 切换项目为 “Release”和“x64”的选项 , 如下图:
文章插图
切换完成后 , 在项目上右键选择“属性” , 如下图:
文章插图
修改配置类型为 DLL , 这样生成的目标文件扩展名自动变为 .dll , 如下图所示:
文章插图
选择“配置属性” -> “C/C++” -> “常规” , 在“附加包含目录”中点击“编辑”来添加相关的目录 , 如下图:
文章插图
这里需要包含的目录包括如下图的几个目录:
文章插图
这里主要是添加了 PHP 源码的几个目录 , 因为编译 PHP 扩展的源码时需要 PHP 的底层内核数据结构进行支持 , 因此需要包含以上的目录 。
选择“配置属性” -> “C/C++” -> “预处理器” , 在“预处理器定义”中点击“编辑”来添加相关预处理指令 , 如下图:
文章插图
在预处理中 , HAVE_LOADDLL 中的 LOADDLL 是扩展的名称 , COMPILE_DL_LOADDLL 中的 LOADDLL 同样也是扩展的名称 , 这个名称与最开始生成扩展模板时的名称应该一致 。
编译源代码
把 php-7.2.20-srcwin32build 目录下的 config.w32.h.in 复制到 php-7.2.20-srcmain 目录下 , 并重命名为 config.w32.h , 这个 .h 文件在编译时是需要的 , 但是在 php-7.2.20-srcmain 下并没有该文件 , 因此需要自己手动进行复制 。
在 config.w32.h 中增加如下代码
1 #define PHP_COMPILER_ID "VC15" 注意这里的 VC15 , 在下载源代码的时候 , 我们已经见到过这个标识了 。
接着 , 从 PHP 的安装目录中复制 php7ts.lib 文件到 loaddll 目录下 , 注意 , 是从PHP 的安装目录中 , 而不是 PHP 源代码的目录中 。
php7ts.lib 在目录 php7.2.10dev 目录下 , 我使用的是 wamp64 下的 php7.2.10 , 大家自己使用对应的 .lib 文件即可 , 当然 , 这个 .lib 文件也必须是 php7.2 的 , 因为我们下载的是 php7.2 的源码 。
推荐阅读
- 智能手机|打包抗疫物资把自己手机也装进去了 手机一日游后已归还主人:网友点赞
- 梦见自己女儿落水不见了 梦见女儿掉入水中
- 梦见小男孩尿在自己床上是什么意思 梦到小男孩尿床
- 梦见自己吃葡萄干是什么意思 梦见自己吃葡萄好不好
- 梦见自己手烂了流血了 梦见自己手烂了一个大窟窿
- 梦见洪水被淹了见涨洪水把自己淹了 梦见发洪水淹没了好多人
- 梦见救了一只猫是什么预兆 梦见自己救了一只猫
- 梦见家里起小火又扑灭 梦见小火被扑灭
- 我梦见黄鼠狼了,是什么意思 梦到黄鼠狼跟自己很亲
- 梦见姐姐死了是怎么了我醒来哭了 梦见活着的姐姐死了自己大哭