我在 C 中创建了一个 PHP 扩展,但我想在我自己的 C++ 动态库中提供我的程序的所有功能(我将在 Xcode 中编程)。
我的问题是如何在我的 php 扩展中链接(和使用)我的 c++ dynlib 中的函数(它将充当我的 c++ 库的包装器)。我需要在 config.m4 中修改什么才能链接到我的 c++ 库?
为您的 C++ 库编写一个 C 包装器接口,然后为此制作 PHP 扩展。
对于 C 接口,您将类声明为“结构”,即使它们是具有私有方法的 C++ 类。无论如何,您都不会公开细节,您只使用前向声明。
所有公共方法都通过带有指针的自由函数公开,您可以通过 Create 方法创建实例并使用 Destroy 方法销毁它们。
因此,您实际上是在与“C 库”进行交互,但实现是在 C++ 中。
请注意,您应该输入:
#ifdef __cplusplus
extern "C" {
#endif
在标题的顶部(在方法之前但在包含守卫之后)和
#ifdef __cplusplus
}
#endif
在它们的末尾(在方法之后但在包含守卫之前)
因为您必须使用 C++ 编译器实际构建包装库,因为它将通过调用库中的 C++ 函数来实现。
请注意,您可以使您的 C 包装器成为使用另一个库的新库,或者是同一库的一部分。
另一种方法是使用 PHP 包装宏,它本质上也创建了绑定,但会为您完成大部分工作。看
http://devzone.zend.com/1435/wrapping-c-classes-in-a-php-extension/
这还将向您展示如何处理该config.m4
文件。