gpt4 book ai didi

php - 加载 PHP 扩展模块失败

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:55:55 25 4
gpt4 key购买 nike

我想要构建一个 *.so ,然后将其作为 PHP 扩展模块并通过 PHP 调用 *.so 中的函数。

我的步骤如下:

  1. 在linux下构建C库,首先创建hello.c

    int hello_add(int a, int b)
    {
    return a+b;
    }

然后构建如下:

    gcc -O -c -fPIC -o hello.o hello.c
gcc -shared -o libhello.so hello.o
  1. 下载php 5.2.17源码

  2. tar -zxvf php.5.2.17.tar.gz

  3. cd php.5.2.17

  4. ./configure ./configure --prefix=/home/user1/php-5.2.17

  5. 制作并安装

  6. cd ext;

  7. ./ext_skel --extname=hello

  8. cd 你好

  9. 通过删除第 16-18 行中的 dnl 来编辑 config.m4,然后保存并退出。

    16: PHP_ARG_ENABLE(hello, whether to enable hello support,
    17: dnl Make sure that the comment is aligned:
    18: [ --enable-hello Enable hello support])

  10. 执行命令:/home/user1/php-5.2.17/bin/phpize

  11. 打开 php_hello.h,添加 PHP_FUNCTION(hello_add);

  12. 打开 hello.c 更改为:

    zend_function_entry hello_functions[] = {
    PHP_FE(confirm_hello_compiled, NULL) /* For testing, remove later. */
    PHP_FE(hello_add, NULL) /* For testing, remove later. */
    {NULL, NULL, NULL} /* Must be the last line in hello_functions[] */
    };

    在文件末尾添加

    PHP_FUNCTION(hello_add)
    {
    long int a, b;
    long int result;
    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &a, &b) == FAILURE) {
    return;
    }
    result = hello_add(a, b);
    RETURN_LONG(result);
    }

  13. ./configure --with-php-config=/home/usr1/php-5.2.17/bin/php-config

  14. make LDFLAGS=-lhello

  15. 然后在/home/usre/php-5.2.17/ext/hello/modules下生成了hello.so,但是 使用 nm hello.so它打印:

                `U hello_add
    0000000000000a98 T _init`
  16. 创建一个 php 文件来测试:

    <?php
    if(!dl('btest.so'))
    {
    echo "can not load hello.so";
    }
    else
    {
    echo "load is done";
    echo hello_add(3,4);// here it will throw error in the log
    }
    ?>

在日志中,它提示:[2014 年 9 月 28 日 18:38:28] PHP fatal error :调用未定义函数 hello_add() ....

顺便说一句,我将 hello.so 复制到另一个 LAMP 环境中,而不是使用刚刚构建的 PHP。两个版本都是5.2.17。

谁能指出这是怎么回事?

最佳答案

在第 15 步中,将 LDFLAGS=lhello 更改为 LDFLAGS=hello.o ,然后它就可以工作了。我不知道 *.so 有什么问题。不管怎样,现在已经修好了。

关于php - 加载 PHP 扩展模块失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26084498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com