2012-04-17 20 views
1

我已經在C中創建了PHP擴展,但是我想在我自己的C++動態庫(我將在Xcode中編程)中提供我的程序的所有功能。使用自定義C++庫的PHP擴展

我的問題是我如何鏈接(&使用)我的C++ dynlib在我的php擴展(它將充當我的C++庫的包裝)的功能。我需要在config.m4中修改以便能夠鏈接到我的C++庫?

回答

1

爲您的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文件做。

+0

那就是我一直在努力去做的。但我如何鏈接我的C++庫使用PHP擴展名makefile或config.m4? – Daniel 2012-04-17 07:52:44

+0

您可以將它作爲C庫鏈接,並只調用C接口函數。因此,與您爲C擴展所做的一樣,請在此處執行。 – CashCow 2012-04-17 07:53:29

+0

但是,我如何在config.m4中做到這一點?像鏈接呢?使用gcc我會直接調用-lmylib,但我不確定在這種情況下 – Daniel 2012-04-17 07:54:50