• 技术文章 >后端开发 >php教程

    linux下php实现C/C++扩展编程_PHP

    2016-06-01 12:21:56原创531
    C和C加加

    某个功能被编译到so文件中,那么如何通过php来调用它?一个方法是写一个php模块(php extension),在php中调用该模块内的函数,再通过该模块来调用so中的函数。下面做一个简单的例子,使用的操作系统是Fedora Core 6。

    首先做一个简单的so文件:

    /**
    * hello.c
    * To compile, use following commands:
    * gcc -O -c -fPIC -o hello.o hello.c
    * gcc -shared -o libhello.so hello.o
    */
    int hello_add(int a, int b)
    {
    return a + b;
    }

    然后将它编译成.so文件并放到系统中:

    $ gcc -O -c -fPIC -o hello.o hello.c

    $ gcc -shared -o libhello.so hello.o

    $ su

    # echo /usr/local/lib > /etc/ld.so.conf.d/local.conf

    # cp libhello.so /usr/local/lib

    # /sbin/ldconfig写段小程序来验证其正确性:
    /**
    * hellotest.c
    * To compile, use following commands:
    * gcc -o hellotest -lhello hellotest.c
    */
    #include
    int main()
    {
    int a = 3, b = 4;
    printf("%d + %d = %d\n", a, b, hello_add(a,b));
    return 0;
    }

    编译并执行:

    $ gcc -o hellotest -lhello hellotest.c

    $ ./hellotest

    3 + 4 = 7OK,

    下面我们来制作PHP模块。首先确保你安装了 php-devel 包,没有的话请自行从安装光盘上找。然后下载php源代码。我使用的是php-5.2.9.tar.gz,解压缩。

    $ tar xzvf php-5.2.9.tar.gz

    $ cd php-5.2.9/ext然后通过下面的命令建立一个名为 test 的模块。

    $ ./ext_skel --extname=test执行该命令之后它会提示你应当用什么命令来编译模块,可惜那是将模块集成到php内部的编译方法。如果要编译成可动态加载的 php_test.so,方法要更为简单。

    $ cd test首先编辑 config.m4 文件,去掉第16行和第18行的注释(注释符号为 dnl 。)

    16: PHP_ARG_ENABLE(test, whether to enable test support,
    17: dnl Make sure that the comment is aligned:
    18: [ --enable-test Enable test support])然后执行 phpize ()程序,生成configure脚本:

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:
    上一篇:PDO不推广,PHP得不到发展_PHP 下一篇:php 静态变量的初始化_PHP
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【腾讯云】年中优惠,「专享618元」优惠券!• 20+值得了解的PHP面试题(附答案分析)• php数据库备份解决思路 • session,该怎么处理 • PHP登录跳转,该怎么处理 • 帮忙分析下哪里异常
    1/1

    PHP中文网