使用php -f调用测试的php文件,现实错误如下:
php: symbol lookup error: /usr/lib/php5/20060613+lfs/resdata.so: undefined symbol: php_pcre_compile
实际使用到的函数式pcre库中的pcre_compile,为什么这边提示是php_pcre_compile呢?undefined symbol又是指什么?
请不吝赐教!php扩展cpcre

解决方案 »

  1.   

    以下是大致代码,注意pcre_compile是pcre库中的函数;PHP_FUNCTION(process_pcre)
    {
    char *data;
    unsigned int data_len;
    char buf[256];
    unsigned int buf_len = sizeof(buf); memset(buf, 0, buf_len);
    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &data, &data_len) == FAILURE)
    {
    return;
    }
    pcre_test(data, buf, buf_len);
    if( buf_len == 0)
    return; RETURN_STRING(buf, 1);
    }
    #include "pcre.h"int pcre_test(char *pattern, char *buf, unsigned int buf_len)
    {
    pcre            *re;
    const char      *error;
    int             erroffset; if(strlen(pattern) < 1)
    {
    snprintf(buf, buf_len-1, "Pattern is NULL.\n");
    return 1;
    } re = aapcre_compile(pattern, PCRE_UNGREEDY|PCRE_CASELESS, &error, &erroffset, NULL);
    if (re == NULL)
    {
    snprintf(buf, buf_len-1, "Pattern failed at offset %d: %s.\n", erroffset, error);
    return 1;
    }
    snprintf(buf, buf_len-1, "PCRE SUCCEED.");
    free(re); return 0;
    }
      

  2.   

    php_pcre_compile这个没被导出,你看一下ext/pcre/php_pcre.def这个文件。
      

  3.   

    写了个简单的demo,运行正常,拿去参考下
    #include "ext/pcre/php_pcre.h"
    PHP_METHOD(MyExt, pcre_compile_test) {
    pcre *re;
    char *pattern, *error ;
    int pattern_len, erroffset;
    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",&pattern, &pattern_len) == FAILURE) {
    return;
    }
    re = pcre_compile(pattern,PCRE_UNGREEDY|PCRE_CASELESS, &error, &erroffset,NULL);
    if (re == NULL) {
            php_printf("PCRE compilation failed at offset %d: %s\n", erroffset, error);
    RETURN_FALSE;
        }
    RETURN_TRUE;
    }
      

  4.   

    不好意思,我这边是另外写的一个扩展,需要用到pcre,调用的pcre的库,直没有通过def文件,直接创建的,./ext_skel --extname=resdata;
      

  5.   

    通常,就是哪没注意造成的比如声明了函数但却没实现,比如接收参数定义写错了等等,比如makefile里inc的php头文件引入了不同于当前版本的了,比如编译64位版本没加-fPIC等等,都是小弟血淋淋的教训,望楼主好好查代码~~
      

  6.   

    我没有通过def,直接调用ext_skel获取并手动添加的;
      

  7.   

    自己顶下,有高手帮忙看看吗?是不是php环境中已经定义了某种强制转化呢?
      

  8.   

    谢谢你的回答,可我已经尝试把pcre库静态编译进来,而且就算是,为什么这边提示是undefined symbol: php_pcre_compile呢?