2013-03-14 186 views
0

我是编码PHP扩展的新手。和我试着在.cpp文件下面的代码片断C++头文件包含

#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(其一个结构)存在于/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/

+0

好吧,通过添加它作为一个库/在g ++中包含thingy将definatly帮助:'-I:设置包含文件的路径。 | -L:设置库的路径 – Najzero 2013-03-14 10:14:34

回答

1

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