3

C (C++ ではない) で書かれたいくつかの小さなライブラリとラッパーがあり、拡張機能を介して PHP で利用できるようにしたいと考えています。適切な PHP 拡張機能の作成に関するいくつかのチュートリアルを読みましたが、難しくはないように思えますが、ライブラリに加えて拡張機能を維持するという面倒なことはしたくありません。

SWIGは Zend PHP 5 と互換性のある拡張機能の構築をサポートしていると読みましたが、これは私にとって完璧です。ただし、SWIG のドキュメントによると、サポートはベータ版のようです。

C での使用法のメタ例として、私のライブラリはかなり一般的です。

int main(void)
{
    struct libfoo *foo;

    char **tmp;

    foo = foo_init();
    if (foo == NULL) {
        fprintf(stderr, "Could not allocate foo\n");
        return 1;
     }

     tmp = foo_parse(foo, "/foo/foo.txt");
     ......
     foo_finit(foo);
}

SWIG を使用してライブラリの拡張機能をこれほどシンプルにする経験を共有できる人はいますか? ビルドのオプション部分として PHP 拡張機能を作成するために SWIG を使用している、C で書かれたフリー/オープン ソース プロジェクトを知っている人はいますか?

フィードバックをお待ちしております。それが肯定的である場合、私は SWIG を実際に理解することに時間を割きます。

4

1 に答える 1

2

数年前、私は C API に基づくプロトタイプの Python モジュールを作成するプロジェクトに参加しました。プロジェクトの誰も Python C API を知らなかったので、SWIG を使用して開始することにしました。原則として、いくつかの自動生成された関数を持つというアイデアは実際には素晴らしく聞こえましたが、必要に応じて SWIG 生成コードを微調整およびカスタマイズする必要があったため、より多くの作業が必要になりました。

PHP の観点から、私は PHP C 拡張機能を維持していますが、SWIG を使用する「単純な」C 関数が役立つとは思いません。手動でコードを書く方が簡単です。Sara Golemon によるPHP の拡張と埋め込みを取得または読む価値があるかもしれません。

于 2009-01-17T16:25:53.303 に答える