把c语言的程序,或者动态库做成php扩展

1.编写 wiringpi.i ,格式:

%module wiringpi

%{
所有头文件
%}

%apply unsigned char { uint8_t };

%include "bindings.i"

把所有头文件加入。

可以使用如下命令批量处理,


ls -l *.h | sed 's/[ ]\+/ /g' | cut -d ' ' -f 9 | sed 's/^/#include "&/g' | sed 's/$/&"/g'


例如:
$:~/tmp/WiringNT-PHP/WiringPi/wiringPi$ ls -l *.h | sed 's/[ ]\+/ /g' | cut -d ' ' -f 9 | sed 's/^/#include "&/g' | sed 's/$/&"/g'
#include "drcSerial.h"
#include "max31855.h"
#include "max5322.h"
#include "mcp23008.h"
#include "mcp23016.h"
#include "mcp23016reg.h"
#include "mcp23017.h"
#include "mcp23s08.h"
#include "mcp23s17.h"
#include "mcp23x0817.h"
#include "mcp23x08.h"
#include "mcp3002.h"
#include "mcp3004.h"
#include "mcp3422.h"
#include "mcp4802.h"
#include "pcf8574.h"
#include "pcf8591.h"
#include "RKIO.h"
#include "sn3218.h"
#include "softPwm.h"
#include "softServo.h"
#include "softTone.h"
#include "sr595.h"
#include "wiringNT.h"
#include "wiringPi.h"
#include "wiringPiI2C.h"
#include "wiringPiSPI.h"
#include "wiringSerial.h"
#include "wiringShift.h"
#include "wpiExtensions.h"
#

2. 把所有头文件中的函数全部读取出来,填入到 bindings.i ,使用工具 generate-bindings.py (注意文件路径)


$ python generate-bindings.py > bindings.i

3.利用swig工具,生成包装程序

$swig -php7 wiringpi.i
  • SWIG 将 wiringpi.i 转变为 wiringpi_wrap.c 并生成 wiringpi.php 和 php_wiringpi.h

4.编译:

$gcc -fpic -c `php-config --includes` -I/usr/local/include wiringpi_wrap.c

$gcc -fpic -c `php-config --includes` -I/usr/local/include -Winline wiringpi_wrap.c

$gcc -fpic -c `php-config --includes` -I/usr/local/include -Winline -pipe wiringpi_wrap.c

  • 注意,有些库我们是默认不安装到系统的,比如 font.h,softTone.h 这些,这个时候编译会出错,我们需要在 wiringpi.i 和 bindings.i中注释掉,然后再用 swig -php wiringpi.i 命令重新生成包装程序。

5.生成php扩展库:

$gcc -shared wiringpi_wrap.o -o wiringpi.so -lwiringPi -L/usr/local/lib -lwiringPiDev -lpthread -lm

6.测试

$php -d extension=/root/WiringNT-PHP/wiringpi.so /root/WiringNT-PHP/examples/test2.php

7.这个是控制GPIO口的,因此我们可以使用以下命令进行监视:

$watch -n 1 gpio readall

8.安装:

$cp wiringpi.so `php-config --extension-dir`

9.使用技巧,在使用的过程中,除了可以直接调用库中的函数,调试的时候,还可以利用空间命名的方式来进行所有函数的直接调用。例如:

wiringpi::wiringPiSetup();
wiringpi::pinmode(8, 1);

参考文档:

https://www.ibm.com/developerworks/cn/opensource/os-php-swig/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值