2010-11-03 44 views
0

那麼給定一個C代碼,是否有一種方法可以使用其他語言(如Python)來執行C代碼。我想說的是,有很多模塊是使用語言構建的,但也提供通過不同語言訪問,有沒有辦法做到這一點?如何開發一個C代碼的python包裝?

回答

1

很多方法。一般來說,這通常被稱爲Foreign Function Interface。維基百科頁面稱,下列關於Python:

* The major dynamic languages, such as Python, Perl, Tcl, and Ruby, 

所有提供方便的用C/C++(或任何其他 語言服從C/C++調用 約定)的本機代碼 。 ø的Python另外提供的ctypes的模塊2,其 可以從共享庫 加載的C函數/上即時DLL和 翻譯簡單數據類型 Python和C 語義之間自動。例如:

import ctypes libc = ctypes.CDLL('/lib/libc.so.6') # under Linux/Unix 
t = libc.time(None) # equivalent C code: t = time(NULL) 
print t 

支持許多語言中流行的選擇是SWIG

+0

我想痛飲將是一個直接的方法。但是當我使用c/C++代碼作爲python模塊時,我會無意中丟失數據,例如,當我使用STL並嘗試將值傳遞給python數據類型時。 – Rahul 2010-11-03 13:16:42

+0

@Rahul:你問過C嗎?那麼,STL如何處理它呢?無論如何,請閱讀SWIG對STL的支持:http://www.swig.org/Doc1.3/Library.html#Library_stl_cpp_library – 2010-11-03 13:49:03

2

當然,它在Python世界中被稱爲「擴展」。該official documentation is here。短摘錄:

本文檔描述瞭如何寫在C或C++ 模塊來擴展 Python解釋與新的模塊。這些模塊可以定義新功能 ,但也可以定義新的對象類型和它們的方法 。該文檔還描述瞭如何將Python解釋器嵌入 另一個應用程序中,以用作 擴展語言。最後,它顯示 如何編譯和鏈接擴展 模塊,以便它們可以動態地(在運行時)加載 到 解釋器,如果底層 操作系統支持此功能。

對於Python來說更簡單的方法是使用​​標準包在DLL中運行代碼。

相關問題