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(構造体)はに存在します/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 に答える