[php-src]Php扩展的多文件编译
内容均以php5.6.14为例.
假设有模块 foo,php_foo.h 和 foo.c 是固有文件,额外的C文件如果要加入编译,大致有五步。
1. 新增头文件 foo_bar.h
#ifndef FOO_BAR_H
#define FOO_BAR_H extern zend_class_entry *foo_bar_ce; #endif
2. 新增主文件 foo_bar.c,里面的两个头文件要加.
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif #include "php.h"
#include "php_foo.h" // #1.
#include "foo_bar.h" // #2. zend_class_entry *foo_bar_ce; zend_function_entry foo_bar_methods[] = {
{NULL, NULL, NULL}
}; FOO_STARTUP_FUNCTION(bar) {
zend_class_entry ce; /* init class entry */
INIT_CLASS_ENTRY(ce, "Foo_Bar", foo_bar_methods); /* register */
foo_bar_ce = zend_register_internal_class(&ce TSRMLS_CC); /* flags */ return SUCCESS;
}
3. 头文件 php_foo.h 新定义宏
#define FOO_STARTUP_FUNCTION(module) ZEND_MINIT_FUNCTION(foo_##module)
#define FOO_STARTUP(module) ZEND_MODULE_STARTUP_N(foo_##module)(INIT_FUNC_ARGS_PASSTHRU)
#define FOO_SHUTDOWN_FUNCTION(module) ZEND_MSHUTDOWN_FUNCTION(foo_##module)
#define FOO_SHUTDOWN(module) ZEND_MODULE_SHUTDOWN_N(foo_##module)(SHUTDOWN_FUNC_ARGS_PASSTHRU)
4. 主文件 foo.c 中引入新增的头文件,并在 MINIT 阶段启动新增模块
#include "php_foo.h"
#include "foo_bar.h" // #1.
/* startup component */
FOO_STARTUP(conf); // #2.
5. config.m4 增加新的C文件
PHP_NEW_EXTENSION(foo,
foo.c \
foo_bar.c \
, $ext_shared)
这最后要注意的也是最重要的,由于更改了m4文件,须重新执行从 phpize 开始的安装步骤使之生效。
不然你将得到一个错误 php: symbol lookup error.
Link: http://www.cnblogs.com/farwish/p/5696878.html
[php-src]Php扩展的多文件编译的更多相关文章
- php重新编译,gd扩展支持jpeg文件
晚上写东西的时候,报了一个错误: Call to undefined function imagecreatefromjpeg() 没有开启 jpeg 支持?原来是默认安装的 gd 扩展默认不支持 j ...
- Makefile 描述的是文件编译的相关规则,它的规则主要是两个部分组成,分别是依赖的关系和执行的命令 PHONY伪目标实践
Makefile的工作流程 http://c.biancheng.net/view/7091.html Makefile文件是什么? 我们教程主要是讲的是 Makefile .很多 Linux(Uni ...
- PHP扩展-如何使用文件config.m4
config.m4文件用于指定正在开发的扩展在类unix系统下构建时支持的选项,指定此扩展需要哪些库以及哪些源文件:使用 GNU autoconf 语法编写.注意需要重新执行phpize,config ...
- PHP扩展-扩展的生成和编译
首先说明一下,PHP扩展有两种编译方式:方式一:在编译PHP时直接将扩展编译进去方式二:扩展被编译成.so文件,在php.ini里配置加载路径: 以下开始说明创建PHP扩展并编译的步骤:下载PHP源码 ...
- [转]嵌入式SQC文件编译
Src Url:http://blog.csdn.net/cws1214/article/details/12996351 A.预编译部分 1.预编译DB2篇 1.1 什么是DB2预编译 在 ...
- JAVA 文件编译执行与虚拟机(JVM)简单介绍
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytpo3 java程序的内存分配 JAVA 文件编译执行与虚拟机(JVM)介绍 ...
- C# 选择文件、选择文件夹、打开文件(或者文件夹) 路径中获取文件全路径、目录、扩展名、文件名称 追加、拷贝、删除、移动文件、创建目录 修改文件名、文件夹名!!
https://www.cnblogs.com/zhlziliaoku/p/5241097.html 1.选择文件用OpenDialog OpenFileDialog dialog = new Ope ...
- C语言include预处理命令与多文件编译
#include预处理命令几乎使我们在第一次接触C的时候就会碰到的预处理命令,可我现在还不怎么清楚,这次争取一次搞懂. 一.#include预处理指令的基本使用 预处理指令可以将别处的源代码内容插入到 ...
- 用gulp把less文件编译成css文件
第一次使用gulp构建工具,使用gulp将.less文件编译成.css文件并输出.根据视频做了笔记.提供新手和自己以后做参考. HTML文件 <!DOCTYPE html> <htm ...
随机推荐
- ssh访问控制,多次失败登录即封掉IP,防止暴力破解
ssh访问控制,多次失败登录即封掉IP,防止暴力破解 一.系统:Centos6.3 64位 二.方法:读取/var/log/secure,查找关键字 Failed,例如(注:文中的IP地址特意做了删减 ...
- Setup QT 5.5.1 + OpenCV 3.0 + Visual Studio 2013 on windows 10
1. Install Visual studio 2013 community version which is free to use for personal usage. 2. Setup th ...
- ngx.lua中遇到的小问题2
用lua+drizzle在数据库中插入数据失败(不能访问数据库) 后面发现原来是nginx配置文件中的drizzle模块部分最后多了一行 content_by_lua 'ngx.say(" ...
- tablediff使用方法
tablediff -sourceserver "db0093\sql2008" -sourcedatabase "testly" -sourcetable & ...
- 关于checkbox复选框
1.复选框后面为什么会有间距,如图 首先这肯定不是空格.实际上是这样的,在Firefox,chrome,Safari等现代浏览器下复选框与文字的间隔确实是由margin引起的,也就是默认情况下,che ...
- oracle ORA-01427: 单行子查询返回多个行
ORA-01427: 单行子查询返回多个行 前几天开发的同事反馈一个问题,说前台系统报出了ORA错误,希望我们能看看是什么原因.java.sql.SQLException: ORA-01427: si ...
- libpng安装与配置(Win7+VS2010)
一.下载 libpng:http://libmng.com/pub/png/libpng.html zlib:http://www.zlib.net/ IDE:VS2010 二.编译 将下载的两个zi ...
- photoshop cs5 key
序列号: 1330-1164-2870-9234-4243-7879 1330-1027-8489-4513-0233-4890 1330-1176-2865-0373-1551-0175 1330- ...
- javascript的数值转换
在javascript中数值转换,最要的一点是函数第一个字母必须要大写.js中的函数有string字符型.number数值型.null空型.boolean布尔型.undefined未定义. 具体的转换 ...
- Ptex源码学习笔记-1
Ptex是Walt Disney Animation Studios开发的纹理映射工具.在看一个叫appleseed的渲染器时看到他支持这种纹理,所以就查看一下,发现比较轻量,所以就想趁此机会学习下. ...