资讯专栏INFORMATION COLUMN

用qt creator搭建开发、调试php扩展的环境

appetizerio / 3570人阅读

摘要:操作系统,请自己尝试目标使用搭建扩展开发调试环境调试目标执行程序脚本里使用扩展里的函数等,代码里面开始唤起单步调试,步骤简洁开发工具能够识别各种文件格式能处理好的引用现代提供的功能,搜索,跳转,终端,等背景调试比较繁琐尝试过从源码编译找

操作系统:deepin(debain),ubuntu(请自己尝试) 目标:使用qtcreator,搭建php扩展开发、调试环境

调试目标:执行php程序(php脚本里使用扩展里的函数等),c代码里面开始唤起单步调试,步骤简洁

c开发工具:能够识别各种文件格式(m4,makefile),能处理好include的引用

现代IDE提供的功能,搜索,跳转,终端,git等

背景: 

gdb调试比较繁琐

尝试过clion, eclipse, atom, vscode, qtcreator
 

从源码编译php
apt-get install build-essential

#找个自己喜欢的目录(要有权限奥)

git clone https://github.com/php/php-src.git
cd php-src


./configure --help
./buildconf --force
./configure --disable-all --prefix=/usr --with-config-file-path=/etc/php.ini --with-config-file-scan-dir=/etc/php.d --enable-ctype --enable-json=shared
 make -j$(cat /proc/cpuinfo |grep "processor"|wc -l)
 ./sapi/cli/php -v
 make install
 php -v
 php -m
 php --ini
php -dextension=json.so -m
mkdir /etc/php.d
echo "extension=json.so" > /etc/php.d/json.ini
php -m
开发php扩展,请参考扩展开发文章 (sum)
cd ext
./ext_skel --extname=sum
cd sum

修改以下文件
config.m4

dnl $Id$
dnl config.m4 for extension sum

dnl Comments in this file start with the string "dnl".
dnl Remove where necessary. This file will not work
dnl without editing.

dnl If your extension references something external, use with:
PHP_ARG_WITH(sum, for sum support,
[  --with-sum             Include sum support])
if test "$PHP_SUM" != "no"; then
  PHP_NEW_EXTENSION(sum, sum.c, $ext_shared,, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1)
fi

sum.c

PHP_FUNCTION(sum)
{
    zval *input;
    zval *item;
    int32_t total=0;
    HashPosition position;

    if (zend_parse_parameters(ZEND_NUM_ARGS(), "a", &input) == FAILURE) {
        return;
    }

    for (zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(input), &position);
      (item = zend_hash_get_current_data_ex(Z_ARRVAL_P(input), &position));
      zend_hash_move_forward_ex(Z_ARRVAL_P(input),&position)
     ){
        if(Z_TYPE_P(item) == IS_LONG){
            total += Z_LVAL_P(item);
        }else zend_throw_exception(NULL, "oh dear!", 0);
           
    }
    RETURN_LONG(total);
}
安装扩展
phpize
./configure
make
make install
echo "extension=sum.so" > /etc/php.d/sum.ini
查看扩展功能

test.php


php test.php

会输出 int(20)

配置qt creator开发环境

菜单栏:文件->新建文件或项目->导入现有项目

  

项目名称:php-src, 位置为php源码编译目录

默认

默认

构建配置:

  

补充:  

  

清除步骤:  

  

解决扩展引用头文件问题,添加"."  

  

运行配置:  

f5调试走起:  

约定

学习他人扩展约定:
把别人的扩展放到ext目录下,按图片修改下内容,按以上步骤调试

参考

PHP Extension Development for Beginners with Joe Watkins
(https://www.youtube.com/watch...)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/23092.html

相关文章

  • 干货 - 如何逆向解决QT程序汉化中乱码问题

    摘要:作者逆向驿站微信公众号逆向驿站知乎逆向驿站一款开发的国外软件,大概率是没有做中文支持的,所以你汉化中,不论怎么设置编码都一定是乱码。 作者:逆向驿站微信公众号:逆向驿站知乎:逆向驿站showImg(https://segmentfault.com/img/bVbnE98?w=1100&h=731); 一款QT开发的国外软件,大概率是没有做中文支持的,所以你汉化中,不论怎么设置编码都一定...

    smartlion 评论0 收藏0
  • 13 万字 C 语言从入门到精通保姆级教程2021 年版 (建议收藏)

    摘要:友情提示先关注收藏,再查看,万字保姆级语言从入门到精通教程。及大牛出天地开始有随之乃有万种语年英国剑桥大学推出了语言。 友情提示:先关注收藏,再查看,13 万字保...

    zombieda 评论0 收藏0
  • hello zapi 项目准备工作-CPP开发PHP之旅第一节

    摘要:原文地址在新手学堂里面,我们将从零基于开发一个简单的扩展,这个扩展的名字叫做现在我们着手准备开发需要的环境吧。 原文地址: http://www.zendapi.org/manual... 在新手学堂里面,我们将从零基于 zendAPI 开发一个简单的 PHP 扩展,这个扩展的名字叫做 hellozapi , 现在我们着手准备开发需要的环境吧。 demo 的项目库地址 https://...

    khs1994 评论0 收藏0

发表评论

0条评论

appetizerio

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<