2011-03-30 30 views
1

我正在學習如何使用SWIG,並且正在爲C庫編寫一個php包裝器。擴展編譯成功,但是當我嘗試調用的函數我得到這個錯誤:嘗試在PHP腳本中嵌入我的C代碼

php: symbol lookup error: /usr/lib/php5/20090626+lfs/fact.so: undefined symbol: fact

+0

代碼是什麼樣的?爲什麼使用SWIG而不是自己編寫擴展?請參閱http://blog.simonholywell.com/post/1156691738/15-excellent-resources-for-php-extension-development(我的博客)瞭解更多信息。 – Treffynnon 2011-03-30 12:18:31

+0

我想學習如何使用SWIG,因爲我有一個複雜的C程序,我必須嵌入到我的PHP腳本..而我不認爲這是更有效的寫自己的擴展 – user683831 2011-03-30 14:56:40

+0

你的代碼在哪裏?這種錯誤可能是由各種代碼問題引起的。或者,您可以考慮聯繫SWIG軟件包的維護人員。 – Treffynnon 2011-03-30 14:59:24

回答

0

你的問題很可能是由於在模塊的名稱不匹配(見%module,或者在命令行上通過)以及您正在生成的.so文件的名稱。

PHP或者任何接受可加載二進制模塊的系統都會對它試圖加載的庫中的入口點的名稱做出某些假設。 PHP似乎假設文件名(fact.so)將包含一個名爲「fact」的函數。

當您運行SWIG時,明確地將模塊名稱設置爲「fact」可能會解決您的問題。如果沒有,發佈生成的SWIG源文件可以幫助我們調試您的問題。