• php WIN下编译注意问题


    下载VC2012,安装
    打开CMD 须运行 vcvars32.bat (初始化VC编译环境)

    下载PHP WIN编译包:http://windows.php.net/downloads/php-sdk/
        下载:
            php-sdk-binary-tools-20110915.zip
        解压,CMD进入该目录,运行
        binphpsdk_setvars.bat
        binphpsdk_buildtree.bat php5dev
        会在当前目录下生成 php5dev 文件夹
        根据你的VC版本,需要编译版本,进入 php5dev/vc*/x**/
        会有 deps 文件夹,根据PHP版本下载:
            deps-5.*-vc11-x86.7z
        解压把压缩包里的deps内容放入当前文件夹的deps目录中
        根据PHP版本下载PHP源码:http://php.net/downloads.php
        下载php-5.*.*.tar.gz 解压到当前目录:php5dev/vc*/x**/
        进入php源码目录执行:
            #生成configure文件
            buildconf
            #生成Makefile文件
            configure --enable-**
            #根据需求添加指定扩展
            #如果需要把扩展编译成DLL,编译参数为:
            --enable-**=shared
            #执行编译
            nmake
            编译出来的文件在 Release_TS

            只编译指定扩展可以使用 configure --disable-all --enable-cli --enable-***=shared


    一般出现php5ts.dll.def : error LNK2001: 无法解析的外部符号 ** 表示依赖的外部库没找到
    使用外部库:
        在执行了 configure 后会在源码目录生成 Makefile 文件,修改该文件
        1. 添加库目录:
        LDFLAGS=/nologo /libpath:"E:phpphpsdkphp55devvc9x86depslib" /libpath:"你的库LIB目录"  
        2. 添加头文件
        CFLAGS=/nologo /FD ...(略)  /I "你的include头文件目录"  /D FD_SETSIZE=256
        3. 指定库
        LIBS=kernel32.lib ...(略) 你的库.lib

    编译你的扩展
        在PHP源码目录 ext 添加扩展
        在WIN下编译扩展的配置文件为:config.w32 必须要有该文件 非 config.m4
        config.w32 文件注解
        #表示编译参数,同时会有 PHP_TEST 变量 如果第三个参数为 yes 表示默认编译
        ARG_ENABLE("test", "for php_test support", "no");
        #一般会有这个判断 表示要编译才添加编译扩展
        if (PHP_TEST == "yes") {
            #参数1 编译名
            #参数2 所有的C文件
            #参数3 null 表示共享编译 true 表示编译进PHP
            EXTENSION("screw", "**.c **.h /*你的C文件*/", null);
        }

    配置函数及注释

    /**
     * 外部扩展,定义变量
     * @param optname 扩展名
     * @param helptext 帮助提示
     * @param defval 默认值
     */
    function ARG_WITH(optname, helptext, defval)
    /**
     * 内部扩展,定义变量
     * @param optname 扩展名
     * @param helptext 帮助提醒
     * @param defval 默认值
     */
    function ARG_ENABLE(optname, helptext, defval)
    //添加后悔创建对应的全局变量
    PHP_{OPTNAME} = "yes"||"no"
    PHP_{OPTNAME}_SHARED = "shared"||true||false
    
    
    /**
     * 定义 存在删除删除标记
     * @param name 字段名
     * @param value 字段值
     */
    function DEFINE(name, value)
    
    /**
     * 检查LIB是否存在,存在会定义标记
     *     LIBS_{LIBNAMES}
     *     LDFLAGS_{LIBNAMES}
     * @param libnames 库名 多个用;号隔开
     * @param target 目标名  编译参数 LIBS_{TARGET}
     * @param path_to_check 检查路径 默认为空
     * @param common_name 组件名 默认为 target
     * @returns {Boolean}
     */
    function CHECK_LIB(libnames, target, path_to_check, common_name)
      例
      CHECK_LIB("pthreadVSE1.lib", "pthread", "E:\php\pthreads-built\lib")
    /** * 检查指定头文件是否有指定函数 * @param header_name 头文件 * @param func_name 函数名 * @param path_to_check 文件路径 * @param add_to_flag 是否添加标记 * @returns {Boolean} */ function CHECK_FUNC_IN_HEADER(header_name, func_name, path_to_check, add_to_flag) /** * 通过正则表达式匹配文件内容 * @param header_name 文件名 * @param regex 正则表达式 * @param path_to_check 路径 * @returns {Boolean} */ function GREP_HEADER(header_name, regex, path_to_check) /** * 检测头文件并 并加入目录 * @param header_name 头文件 * @param flag_name 完整标记 * @param path_to_check 检测路径 * @param use_env 使用环境变 * @param add_dir_part 添加路径 * @param add_to_flag_only * @returns {Boolean} */ function CHECK_HEADER_ADD_INCLUDE(header_name, flag_name, path_to_check, use_env, add_dir_part, add_to_flag_only) 例如: CHECK_HEADER_ADD_INCLUDE("zookeeper.h", "CFLAGS", '..\src\c\include;'); /** * 添加DIST文件 * @param filename */ function ADD_DIST_FILE(filename) /** * 添加扩展依赖DEP文件 * @param extname 扩展名 * @param dependson 依赖扩展 * @param optional 依赖是否必须 */ function ADD_EXTENSION_DEP(extname, dependson, optional) /** * 声明扩展 * @param extname 扩展名 * @param file_list 编译文件列表 * @param shared 是否强制共享 传null使用编译参数,否则传扩展名 * @param cflags C标签,编译参数 如 /D ZLIB_EXPORTS /I "你的include头文件目录" 等 * @param dllname 编译出的dll文件名 * @param obj_dir */ function EXTENSION(extname, file_list, shared, cflags, dllname, obj_dir) /** * 添加C源码 * @param dir 源码目录 * @param file_list 文件列表 * @param target 编译目标标签 * @param obj_dir */ function ADD_SOURCES(dir, file_list, target, obj_dir) /** * 添加或修改自定义标签 * @param name 标签名 * @param flags 标签值 * @param 标签目标 (扩展名) */ function ADD_FLAG(name, flags, target) 例如: 加头文件 ADD_FLAG('CFLAGS', ' /I "..\src\c\include" '); /** * 添加DEF资源文件 * @param name 资源文件名 */ function ADD_DEF_FILE(name) /** * 添加全局头文件定义,通过此方式开控制扩展某些功能的启用 * @param name 常量名 一般以HAVE_开头 * @param value 常量值 * @param comment 注释 * @param quote 引用 即该常量值为其他常量值 */ function AC_DEFINE(name, value, comment, quote) /** * 添加头文件 * @param dir 目录 * @param headers_list 头文件列表 空格隔开 */ function PHP_INSTALL_HEADERS(dir, headers_list) /** * 输出消息 */ function MESSAGE(msg) /** * 输出错误 */ function ERROR(msg) /** * 输出警告 */ function WARNING(msg)
  • 相关阅读:
    10款面向HTML5 画布(Canvas)的JavaScript库
    lufylegend库 LGraphics扭曲图片
    lufylegend库 LGraphics绘制图片
    lufylegend库 LGraphics
    lufylegend库 LBitmapData LBitmap LSprite
    Web骇客网;外刊IT评论
    HTML5画布(CANVAS)速查简表
    Canvas 画板
    Canvas 阴影效果
    Canvas 图片灰度
  • 原文地址:https://www.cnblogs.com/liushannet/p/3978866.html
Copyright © 2020-2023  润新知