2011-11-14 79 views
3

我有一個庫和一些頭文件,沒有C++源代碼,我想用它與python。 我試過py ++,但是gccxml報告錯誤。 我試過swig,但有些許多「未定義符號」錯誤。 有沒有一些智能工具可以自動做這樣的事情?如何爲python包裝一個C++庫?

+1

swig ++,boost python – sehe

回答

2

你可以嘗試使用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++定義在頭文件和爲你做的辛勤工作,但依據升壓蟒蛇頁面這裏不再維持,所以我我不確定它的工作效果。

+0

自動代碼生成器使用gccxml,但gccxml報告頭文件中存在一些錯誤。 – WhatisThat

+0

您可以嘗試發佈關於您從gccxml獲得的錯誤的單獨問題。也許有人可以幫助。 – obmarg

0

這種方法需要一點工作,如果你有很多函數,你想要打包/函數使用很多C++內在類型作爲參數/返回值,可能是不可行的。

如果不是這種情況,可以使用純c參數和返回類型定義一些c-wrapper函數,在它們前面帶有「extern c」關鍵字。編譯並將「包裝函數」鏈接到C++庫。然後你可以使用ctypes模塊(來自python)來調用你的包裝函數,然後調用庫中的C++函數。

+0

也許,這個想法並不壞。謝謝你 – WhatisThat