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 使库的扩展如此简单?有谁知道使用 SWIG 将 php 扩展作为构建的可选部分用 C 编写的任何免费/开源项目?

在此先感谢,我希望得到一些反馈。如果它是积极的,我会花一些时间真正了解 SWIG。如果不是,我会花时间手工制作扩展。

4

1 回答 1

2

几年前,我参与了一个基于 C API 生成原型 Python 模块的项目。我们决定使用 SWIG 来帮助我们开始,因为项目中没有人知道 Python C API。虽然原则上拥有一些自动生成的函数的想法在现实中听起来很棒,但它给我们带来了更多的工作,因为我们需要调整和自定义 SWIG 生成的代码以满足我们的需求。

从 PHP 的角度来看,我维护了一个 PHP C 扩展,并且不相信与 SWIG 一起使用的“简单”C 函数会有所帮助,手动编写代码会更容易。Sara Golemon 的扩展和嵌入 PHP可能值得您阅读或阅读。

于 2009-01-17T16:25:53.303 回答