例子是照着网上写的,虽然比较简单,还是内容粘贴起来还是有点太多,我把地址贴一下
http://tech.idv2.com/2007/07/06/use-local-so-in-php/
使用php调用hello_add()没有问题。
现在我修改了hello_add函数:int hello_none()
{
        return 0;
}int hello_add(int a, int b)
{
        hello_none();        return a + b;
}再使用php调用hello_add就出现了问题: PHP Fatal error:  Call to undefined function hello_add().....这是什么原因呢??

解决方案 »

  1.   


    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);
    }里面没有hello_none()函数
      

  2.   

    我是在c中调用的,意思就是php调用c中的接口hello_add,这个hello_add不可能几行代码就完成,如果写的比较复杂,肯定是封装到各个函数中调用。比如: php的函数为 hello_add_php,调用c动态库中的hello_add(a,b), 而hello_add需要两步完成int hello_add_1()
    {
     ...
    }int hello_add_2()
    {
     ...
    }int hello_add(a, b)
    {
        hello_add_1();
        hello_add_2();    return 0;
    }这时候,当hello_add调用其他函数的时候,就会出现问题当时我是在这个函数中使用了strlen,不明白为啥不能调用strlen,后来写了个hello_none函数,如果调用,就会出错。
      

  3.   

    C语言中有strlen函数吗?这是在php中已经封装好的,怎么能在C中调用呢?
    如果要使用,那么你应该将strlen的C代码包含进来
      

  4.   

    就像我刚才定义hello_add函数那样,如果这个函数中要调用其他函数,该如何办?如何将strlen的c代码包含进来,在c中#include <string.h>就可以了,这样算包进来吗?
      

  5.   

    strlen 在C里需要加载string.h
    #include <string.h>
      

  6.   

    呵呵,刚查看了下,确实是忘记#include <string.h>了,编译的时候,提示警告,没注意,在php中就会出问题但是hello_add要调用自己定义的函数,为啥不行呢?
      

  7.   


    int hello_add(a, b)
    {
      hello_add_1();
      hello_add_2();
      
      return 0;  //这里貌似不能这么写吧,看看规范的C函数是怎么写的
      RETURN_LONG(result);
    }
      

  8.   

    c中定义一个函数,就是这么写的啊原文是:int hello_add(int a, int b)
    {
        return a + b;
    }我是直接返回0了,没有做加法处理int hello_add(int a, int b)
    {
        // 其他处理,例如hello_add_1()...
        return 0;
    }RETURN_LONG(result); 是php扩展里面的,我写的这个函数是c的动态库中的
      

  9.   

    被调用的函数是在前面定义的比如: int a() 
    {
        return 0;
    }int b()
    {
        return a();
    }
    函数a肯定是先定义的,然后函数b才会调用
      

  10.   

    从错误代码来看成,是你没成功引入你自己的模块
    使用phpinfo()或是print_r(get_loaded_extensions());或是print_r(get_extension_funcs("hello"));