2009-01-17 22 views
3

我有幾個用C(而不是C++)編寫的小型庫和包裝,我希望通過擴展提供給PHP。我在writing proper PHP extensions上閱讀了幾篇教程,看起來並不困難,但是我不想在維護擴展庫和庫之外的麻煩。用於製作PHP擴展的SWIG,你試過了嗎?

我看到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); 
} 

有沒有人有任何經驗與使用痛飲做出了這樣簡單的庫擴展分享?有誰知道使用C語言編寫的使用SWIG將PHP擴展作爲構建的可選部分的免費/開源項目?

在此先感謝,我希望得到一些反饋意見。如果它是積極的,我會花一些時間來真正瞭解SWIG。如果沒有,我會花時間手工製作分機。

+0

我想我會選擇稍後嘗試SWIG更簡單的事情。現在,我只研究現有的curl和mysql實現,它們與我的小型庫相比複雜(就PHP而言)。 – 2009-01-17 16:35:50

回答

2

很多年前,我參與了一個基於C API生成原型Python模塊的項目。我們決定使用SWIG來讓我們開始,因爲項目中沒有人知道Python C API。雖然原則上有一些自動生成的函數在現實中聽起來很棒,但是由於我們需要調整和定製SWIG生成的代碼以適應我們的需求,因此我們需要更多的工作。

從PHP的角度來看,我維護一個PHP C擴展,不要相信用SWIG進行的「簡單」C函數會有所幫助,用手寫代碼會更容易。 Sara Golemon可能值得您或閱讀Extending and Embedding PHP

+0

謝謝,我只是將SWIG作爲一項努力,以便在每個庫更新時更新擴展時節省時間。我也一定會看看這本書,她在PHP開發網站上的例子寫得非常好,整本書都非常方便:)謝謝你的見解! – 2009-01-17 16:32:47