文档章节

centos下编写c的扩展(一)

Nigel_2010
 Nigel_2010
发布于 2014/10/10 11:35
字数 570
阅读 28
收藏 0

环境描述:CentOS release 6.5 (Final),linux2.6.32-431.el6.x86_64,lamp环境+php源码一份


首先下载一份PHP的源码,并上传到centos服务器上

源码下载地址:https://github.com/php/php-src

 

然后在命令行进入到源码路径下的ext目录

然后创建扩展项目

[root@myhost ext]# ./ext_skel --extname=hello


hello就是扩展项目的名字

创建完成之后ext目录下会多一个hello的文件夹,这个文件夹就是我们的扩展项目

[root@localhost ext]# cd hello/

hello目录下,生成了该扩展的骨架:


以后再逐个分析骨架中文件的作用,练习一先跳过

生成扩展框架后,需要修改我们的扩展的m4文件,打开config.m4文件,去掉以下配置前的dnl:

扩展没有包裹任何外部的C库,你需要添加支持–enable-myfunctions配置开关到PHP编译系统里(–with-extension 开关用于那些需要用户指定相关C库路径的扩展)。可以去掉自动生成的下面两行的注释来开启这个配置。



编辑hello.c文件,加入我们的扩展函数

[root@localhost hello]# vim hello.c


ps:上图中的RETVAL_STRINGL(strg,len);修改成RETVAL_STRINGL(strg,len,0);不然会报错

然后添加我们这个函数hello


PHP_FUNCTION的参数,就是我们在php中所调用的函数名,这个文件中其他函数,以后再详细了解。

接下来开始编译扩展

[root@localhost hello]# phpize
[root@localhost hello]# ./configure --with-php-config=/usr/bin/php-config  
[root@localhost hello]# make
[root@localhost hello]# make test
[root@localhost hello]# make install


看到如下图:

成功生成了我们的扩展,放在/usr/lib64/php/modules/目录下

接下来修改php.ini文件,加入我们的扩展

[root@localhost hello]# vim /etc/php.ini

查看php的模块,可以看到我们的扩展已经被添加进来了

[root@localhost hello]# php -m



最后一步,重启apache,编写测试页。




看到输出hello~!到此就结束了。。。


下一练习,将主要了解hello.c中的内容,和zend api,再编写一个有用的php扩展。


© 著作权归作者所有

Nigel_2010
粉丝 0
博文 5
码字总数 1890
作品 0
昌平
程序员
私信 提问
为自动化准备之采用传统方式命名网卡

一:实验环境 centos7虚拟机一台 二:网卡命名机制 CentOS 6之前,网络接口使用连续号码命名,如eth0、eth1等,当增加或删除网卡时,名称可能会发生变化;而CentOS 7使用基于硬件,设备拓扑和...

云云毓
2017/09/09
0
0
mysql5.7:mysql安装和基于SSL加密的主从复制(详细剖析)

小生博客:http://xsboke.blog.51cto.com 小生 Q Q:1770058260 -------谢谢您的参考,如有疑问,欢迎交流 目录: --------mysql-5.7.13简介及安装 --------配置mysql-5.7.13的ssl加密传输 ...

小生博客
2017/05/07
0
0
游戏服务器架构调研报告

服务器架构调研报告 刘源霖20151119 1. 前言 本文档主要是调研分析新的手游服务端架构,为下一款手游服务端研发提供可参考的方案。主要的参考点是数据持久化,并发效率,分布式,沙盒机制,热...

shezjl
2016/01/22
2K
1
Vim 如何显示函数?函数如何切换到定义处?

自从尝试在Linux下进行各项学习,遇到的问题可谓是多如牛毛,弄得我一个头两个大,每次都到oschina,csdn,bccn,programfan等等问了很多,这不,现在又得来麻烦大家了 我在linux下使用vim进...

kjsrah
2013/06/07
3.6K
2
CentOS7安装MySQL5.7数据库以及配置

一、MySQL5.7主要特性: 原生架构支持centos7的Systemd (1.)更好的性能:对于多核的CPU、固态硬盘、锁有着更好的优化、更好的innoDB存储引擎。 (2.)更为健壮的复制功能:复制带来了数据完...

薄凉小伙
2017/06/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

写一个Mysql死锁的例子

创建表 CREATE TABLE `test1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(10) NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=ut......

嘴角轻扬30
3分钟前
0
0
vue cle新建vue项目

1,首先安装上vue-cli 3.0以上的版本,在cmd里输入命令 npm install -g @vue/cli 安装vue_cli 2,命令里输入vue ui会弹出动画创建vue页面 3,点击创建输入创建项目的位置 4,输入项目名,点...

东方巨人
20分钟前
0
0
fastdfs-client-java 安装方法

因为远程无 fastdfs-client-java.jar包,只能去官方网站下载到本地,再用mvn clean install 命令打包到本地仓库 如果mvn出现错误,删除源码中的pom.xml 的<version>3.5.1</version>再编译...

lsjlgo
27分钟前
0
0
4.01、Linux异常

1、无法连接虚拟设备ide1:0,因为主机上没有响应的设备 解决方法:找到“虚拟机” —— 打开“虚拟机设置” —— 单击“CD/DVD(IDE)”,右侧选中“使用ISO映像文件”,然后选中自己的镜像,重启...

静以修身2025
41分钟前
1
0
不允许有匹配 "[xX][mM][lL]" 的处理指令目标

Bug解决方案:org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 8; 不允许有匹配 "[xX][mM][lL]" 的处理指令目标 Caused by: org.xml.sax.SAXParseException; lineNumber: 1; c......

我叫小糖主
45分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部