zoukankan      html  css  js  c++  java
  • [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

  • 相关阅读:
    A* 寻路学习
    Tower Defense Toolkit 学习
    Restaurant & Cooking Starter Kit v1.2.1 学习
    常用工具
    Unity 2017 Game Optimizations (Chris Dickinson 著)
    小小小游戏
    支付宝9张图稳扫出敬业福
    支付宝最强集五福教程
    【免费CDN】俄罗斯DDOS-Guard 支持ssl 防御1.5T
    First day with Java :)
  • 原文地址:https://www.cnblogs.com/farwish/p/5696878.html
Copyright © 2011-2022 走看看