我已经在C中创建了PHP扩展,但是我想在我自己的C++动态库(我将在Xcode中编程)中提供我的程序的所有功能。使用自定义C++库的PHP扩展
我的问题是我如何链接(&使用)我的C++ dynlib在我的php扩展(它将充当我的C++库的包装)的功能。我需要在config.m4中修改以便能够链接到我的C++库?
我已经在C中创建了PHP扩展,但是我想在我自己的C++动态库(我将在Xcode中编程)中提供我的程序的所有功能。使用自定义C++库的PHP扩展
我的问题是我如何链接(&使用)我的C++ dynlib在我的php扩展(它将充当我的C++库的包装)的功能。我需要在config.m4中修改以便能够链接到我的C++库?
为您的C++库编写一个C封装接口,然后为此创建PHP扩展。
对于C接口,即使它们是具有私有方法的C++类,也会将类声明为“struct”。无论如何你都不会公开细节,你只使用前向声明。
所有的公共方法都通过使用指针的自由函数公开,并且您通过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
文件做。
那就是我一直在努力去做的。但我如何链接我的C++库使用PHP扩展名makefile或config.m4? – Daniel 2012-04-17 07:52:44
您可以将它作为C库链接,并只调用C接口函数。因此,与您为C扩展所做的一样,请在此处执行。 – CashCow 2012-04-17 07:53:29
但是,我如何在config.m4中做到这一点?像链接呢?使用gcc我会直接调用-lmylib,但我不确定在这种情况下 – Daniel 2012-04-17 07:54:50