在vs2017下编译php7.2.x扩展

  • 工具 vs2017只需要安装VC++环境即可,大概占用空间8G,不要随便减少组件,否则有可能编译不过;

  • 下载php-sdk最新版2.2.6,下载源码php7.2.20 php-7.2.20-src.zip和二进制php-7.2.20-nts-Win32-VC15-x64.zip,二进制是在zephir中使用的,下载desp,里面的vc15/x64/全部文件,用命令非常慢,全部下载下来;

  • 安装zephir,用来,开发php扩展,原生c语言太难了,zephir开发很容易;配置环境变量
    下载https://github.com/phalcon/zephir放到D:\php-sdk\zephir,然后执行composer update更新;
    下载https://github.com/phalcon/php-zephir-parser/releasesphp-zephir-parser扩展,选择正确的版本,我选择zephir_parser_x64_vc15_php7.2-nts_1.3.1-481.zip,配置到D:\php-sdk\php里面ext目录,在php.ini里面加入即可

    D:\php-sdk\php  //php二进制文件路径
    D:\php-sdk\zephir\bin  //zephir开发环境路径
    D:\php-sdk\zephir\vendor\bin
  • 解压phpsdk到D:\php-sdk;运行phpsdk-vc15-x64.bat,变成$;phpsdk\_buildtree phpdev,生成phpdev/vc15/x64目录,在phpdev/vc15/x64目录下新建php-src文件夹,将PHP源码复制到此目录, 切换到php-src目录(cd php-src),

    cd D:\php-sdk\phpdev\vc15\x64\php-src

    执行phpsdk\_deps -u来更新deps,这个很慢用直接下载了放到x64/deps/下面;然后建立x64/pecl目录,我们开发的所有扩展放到此处编译;编译命令

    buildconf
    configure --disable-zts --enable-cli --enable-zlib --enable-hash --enable-session --without-gd --with-bz2 --enable-demo=shared --enable-fd-setsize=2048 --enable-sanitizer
    nmake

    然后就编译成功了;
    D:\php-sdk\phpdev\vc15\x64\php-src\x64\Release可以找到你要的扩展php_扩展.dll,这是NTS版本
    D:\php-sdk\phpdev\vc15\x64\php-src\x64\Release_TS下面是线程安全TS版本,编译用--disable-all

  • 生成扩展php_扩展.dll,在php.ini添加extension=扩展名,重启php即可;

  • 生成php7的dll模板
    进入 D:\php-sdk\phpdev\vc15\x64\php-src\ext文件夹
    执行PHP ext_skel_win32.php --extname=demo生成模块文件夹demo
    在demo.c中查找PHP_FUNCTION函数下添加

    PHP_FUNCTION(demo) {
      php_printf("Hello C extension中国");
    }

    修改

    const zend_function_entry demo_functions[] = {
      PHP_FE(confirm_demo_compiled, NULL)
      PHP_FE(demo, NULL)  //这里加一行代码
      PHP_FE_END
    };

    在D:\php-sdk\phpdev\vc15\x64\php-src\main\文件夹里的config.w32.h加#define PHP_COMPILER_ID "VC15"
    打开vs2017新建-从现有代码创建-项目名称demo
    选择动态链接库,然后切换一下解决方案为release,x64
    右键配置属性C/C++,附加包含目录

    D:\php-sdk\phpdev\vc15\x64\php-src
    D:\php-sdk\phpdev\vc15\x64\php-src\TSRM
    D:\php-sdk\phpdev\vc15\x64\php-src\main
    D:\php-sdk\phpdev\vc15\x64\php-src\Zend

    C/C++预处理器

    ZEND_DEBUG=0
    PHP_EXTENSION
    PHP_WIN32
    ZEND_WIN32
    HAVE_EXT_CPP=1
    COMPILE_DL_EXT_CPP
    ZEND_WIN32_KEEP_INLINE
    ZTS #不添加就是关闭安全,一般不加

    \win32\build\文件夹里找到“config.w32.h.in”,将这个文件复制到E:\php7\main\文件夹里,去掉后面的“.in”
    右键项目属性,连接器,输入,附加依赖项,编辑,将php7.lib的路径放进去(这个文件在php编译后的程序文件夹里,根目录的dev文件夹里路径D:\php-sdk\php\dev\php7.lib
    编译生成的是NTS版本
    在x64\Release\下面有ext_cpp.dll
    需要改名字php_ext_cpp.dll,所有模块在前面加上php_然后在php.ini配置写上extension=cpp_ext

作者:Yoby  创建时间:2020-07-23 20:09
 更新时间:2024-12-05 13:26
上一篇:
下一篇: