我有一個庫和一些頭文件,沒有C++源代碼,我想用它與python。 我試過py ++,但是gccxml報告錯誤。 我試過swig,但有些許多「未定義符號」錯誤。 有沒有一些智能工具可以自動做這樣的事情?如何爲python包裝一個C++庫?
回答
你可以嘗試使用boost python
你需要創建一個簡單的包裝DLL鏈接到你原來的庫,包含類似下面的代碼(假設你要導出一個名爲LibraryClass類2個功能,FOO &吧)
#include <librarytowrap.h>
#include <boost/python.hpp>
using namespace boost::python;
BOOST_PYTHON_MODULE(Library)
{
class_<LibraryClass>("LibraryClass")
.def("foo", &LibraryClass::foo)
.def("bar", &LibraryClass::bar)
;
}
您可能能夠使用the automatic code generator讀取C++定義在頭文件和爲你做的辛勤工作,但依據升壓蟒蛇頁面這裏不再維持,所以我我不確定它的工作效果。
自動代碼生成器使用gccxml,但gccxml報告頭文件中存在一些錯誤。 – WhatisThat
您可以嘗試發佈關於您從gccxml獲得的錯誤的單獨問題。也許有人可以幫助。 – obmarg
這種方法需要一點工作,如果你有很多函數,你想要打包/函數使用很多C++內在類型作爲參數/返回值,可能是不可行的。
如果不是這種情況,可以使用純c參數和返回類型定義一些c-wrapper函數,在它們前面帶有「extern c」關鍵字。編譯並將「包裝函數」鏈接到C++庫。然後你可以使用ctypes模塊(來自python)來調用你的包裝函數,然後調用庫中的C++函數。
也許,這個想法並不壞。謝謝你 – WhatisThat
- 1. 如何爲一個DLL庫創建一個Python包裝
- 2. 如何正確包裝一個C庫與Python CFFI
- 3. 如何爲一個簡單的c庫生成一個cffi包裝
- 4. 使用jni包裝一個C++庫
- 5. 爲C++庫製作一個Objective-C包裝器
- 6. 如何在C++包裝庫中傳播C++異常到Python?
- 7. 如何編寫一個java庫的python包裝
- 8. 如何在Objective-C中包裝C++庫?
- 9. 如何爲C++函數創建一個c#包裝器?
- 10. 從Python的使用C:如何創建一個ctypes包裝
- 11. 如何開發一個C代碼的python包裝?
- 12. 用於UDT C++庫的Python包裝器
- 13. KONSOLE有一個PYTHON包裝?
- 14. 爲Lua包裝一個C庫:我如何創建函數的嵌套表?
- 15. 我應該如何包裝的C庫爲C++
- 16. 在C中包裝一個C++庫? (不要「extern c」)
- 17. C++創建一個「包裝」
- 18. 如何包裝一個ngRepeat
- 19. 在Python中爲C#庫創建包裝器
- 20. 使用Cython打包一個包裝另一個庫的庫
- 21. Python的顛覆包裝庫
- 22. 我如何包裝兩個庫在Xcode 4到另一個庫,並使用包裝庫
- 23. 如何開始在另一個包裝器上編寫python包裝?
- 24. 如何在兩個函數的python中創建一個包裝?
- 25. 爲cout做一個包裝?
- 26. 如何包裝一個C#DLL在qt C++中使用?
- 27. Python包裝到C回調
- 28. 在Python包裝和用C
- 29. C++包裝器C庫作爲共享庫
- 30. 如何包裝python字典?
swig ++,boost python – sehe