0

我是编码 PHP 扩展的新手。我正在尝试在 .cpp 文件中使用以下代码段

#include <iostream>
#include "Zend/zend.h"

using namespace std;

void describe_zval(zval *foo)
{
    if (foo->type == IS_NULL)
    {
        php_printf("The variable is NULL");
    }
    else
    {
        php_printf("The variable is of type %d", foo->type);
    }
}

int main(void)
{
    return 0;
}

变量zval(它是一个 struct )存在于/usr/local/src/php-5.4.11/Zend/zend.h

汇编

g++ -I /usr/local/src/php-5.4.11 -I /usr/local/src/php-5.4.11/Zend try.cpp

这给出了错误

In file included from /usr/local/src/php-5.4.11/Zend/zend_alloc.h:27:0,
                 from /usr/local/src/php-5.4.11/Zend/zend.h:237,
                 from try.c:2:
/usr/local/src/php-5.4.11/Zend/../TSRM/TSRM.h:20:26: fatal error: tsrm_config.h: No such file or directory
compilation terminated.

tsrm_config.h 存在于/usr/local/src/php-5.4.11/

我如何包含子目录,/usr/local/src/php-5.4.11/因为编译过程需要位于以下几个子目录中的许多文件/usr/local/src/php-5.4.11/

4

1 回答 1

1

在 php-5.4.11 目录中,您还应该包括 Zend、main、TSRM(如果您想在线程安全服务器上开发您的扩展)。我的意思是你应该有:-I /usr/local/src/php-5.4.11/main I /usr/local/src/php-5.4.11/Zend I /usr/local/src/php-5.4.11/TSRM,你可以创建一个包含这些目录的makefile。顺便说一句,你为什么不使用 SWIG 来创建你的包装器代码?你应该试试。

于 2013-03-17T06:24:03.257 回答