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

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

https://segmentfault.com/a/1190000009828172

目标:使用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

$a = sum([1,2,3,4,10]);

var_dump($a);

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...)

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

qt creator php扩展,用qt creator搭建开发、调试php扩展的环境相关推荐

  1. babel import语法 js_搭建开发JS库的运行环境

    1.npm 首先在自定义的目录下打开终端执行 npm init : 根据对应的步骤生成相应的package.json 文件 . 2.Eslint (代码检查工具) 安装eslint:npm insta ...

  2. 【本地调试环境一键安装包】php+mysql平台搭建集成软件总汇【php环境汇总】

    [本地调试环境一键安装包]php+mysql平台搭建集成软件总汇[php环境汇总] ********************************************************** ...

  3. Hadoop环境搭建--Docker完全分布式部署Hadoop环境(菜鸟采坑吐血整理)

    系统:Centos 7,内核版本3.10 本文介绍如何从0利用Docker搭建Hadoop环境,制作的镜像文件已经分享,也可以直接使用制作好的镜像文件. 一.宿主机准备工作 0.宿主机(Centos7 ...

  4. QT,QT/E,Qtopia,qt creator的联系与区别

    关于qt,qte,qtopia,qt creator它们之间的区别和联系,相信对所有刚刚入门qt的同学来说都是很模糊的.我在刚开始接触qt的时候也是这样,而且我第一次接触的是qte,因为要在arm上开 ...

  5. QT自定义窗口插件在QT Creator的应用

    根据<C++ GUI Programming with Qt 4,Second Edition>中第5章的"在Qt设计师中集成自定义窗口部件"小节,使用插件法生成的窗口 ...

  6. Qt图形界面编程入门(Qt的历史、Qt安装资源链接、Qt Creator简介)

    Qt的历史渊源 Qt是1991年由挪威的奇趣科技(Trolltech)公司开发的跨平台C++图形用户界面(GUI)用程序开发框架,2008年,奇趣科技公司被诺基亚公可收购,Qt也因此成为诺基亚公司旗下 ...

  7. qt creator 32位linux,Qt Creator下载mac版-Qt Creator Mac版下载 V4.14.2-PC6苹果网

    Qt Creator是一个跨平台的 Qt IDE, Qt Creator 是 Qt 被 Nokia 收购后推出的一款新的轻量级集成开发环境(IDE).此 IDE 能够跨平台运行,支持的系统包括 Lin ...

  8. qt creator linux安装教程,- Qt Creator下载和安装(详细教程)

    如果想用一个exe干净利落的发布程序,就需要使用静态编译版的Qt库,网上有教程,我就不多说了,可以教大家用现成的,在Git-hub上正好有静态Qt库: https://github.com/foste ...

  9. linux ubuntu QT 下载和安装(Qt Creator)

    下载地址:https://download.qt.io/ 为什么选5.14版本,因为其他几个没发现 用迅雷下,下好后拷贝到ubuntu里,切换root用户,给安装包赋777权限 chmod 777 q ...

最新文章

  1. 「屋漏偏逢连夜雨」,Log4j 漏洞还没忙完,新的又来了
  2. 【每日一算法】整数反转
  3. 算法---------两个数的交集
  4. 第九周项目三-人数不定的工资类
  5. solaris10找安装包的地方
  6. C#进阶系列——WebApi 接口测试工具:WebApiTestClient
  7. 线程池参数到底要怎么配?
  8. HDU 2045 不容易系列之(3)―― LELE的RPG难题(递推)
  9. SpringMVC 理论与有用技术(一) 简单、有用、易懂的几个实例
  10. 【程序员面试宝典】第五章 程序设计基本概念
  11. 模型 matlab_MBSDM土壤介电模型及Matlab实现
  12. 整数数组的最大子数组
  13. 【渝粤教育】国家开放大学2018年秋季 0692-21T化工设备机械基础 参考试题
  14. Paypal 在线支付接口应用从零开始,第1节,[建立沙盒测试环境]
  15. TIA博途中如何将CPU导出为GSD文件与其他PLC进行PROFINET通信?
  16. 全球及中国仿制药产业未来发展走势及营销产量规模预测报告2021-2027年
  17. 声卡驱动win7安装失败解决方法
  18. Flask 数据生成/数据迁移/数据事件
  19. 通过Python自动压缩文件并发送邮件
  20. 《计算机系统要素》 第六章 汇编编译器

热门文章

  1. Flink】FLink 通讯组件 RPC
  2. 【Elasticsearch】es FST (Finite State Tranduer) 有限状态转换器
  3. 【Elasticsearch】 Elasticsearch对外提供分词服务实践
  4. 【Flink】Flink 自定义 trigger并且进行分析
  5. 05-IntelliJ IDEA清空项目缓存
  6. 【Hbase】HBase界面简介
  7. kafka生产数据时的应答机制(ACK)
  8. 联想开机启动项按哪个_win7系统如何修改系统启动项 win7系统修改系统启动项方法【步骤】...
  9. SpringCloud+Docker+Jenkins+GitLab+Maven实现自动化构建与部署实战
  10. 彻夜怒肝!SpringBoot+Sentinel+Nacos高并发已撸完,快要裂开了!