python作為出名的膠水語言,可以呼叫其他語言的模組。在實際開發中一般使用python語言快速形成函式的模型,對於其中的不同模組,使用不同的語言進行實現。今天就先介紹如何使用python呼叫c語言中的模組。在這裡使用python呼叫c編譯生成的動態庫檔案。
首先寫乙個c語言動態庫檔案
#includevoid hello()
gcc -shared -o libhello,so hello.c
其中-shared表示編譯生成動態庫檔案。
為了測試上述動態庫的正確性,可以使用c**先進行測試一下
#include #include #include int main(void)
myadd=dlsym(handle,"hello");//call dlsym function
myadd();
dlclose(handle);
}
gcc so_hello.c -o so_hello -ldl
./hello 執行無誤後,編寫python指令碼
#!/usr/bin/env python
from ctypes import *
if "__main__" == __name__:
libc = cdll.loadlibrary("/home/xiang/python/c/libhello.so")
libc.hello()
python中,ctypes模組可以載入動態鏈結庫,使用時,需要首先「from ctypes import *」。
常用的函式有:
libc = cdll.loadlibrary("***.so") #載入.so動態鏈結庫
libc.myfunc(...)
#呼叫動態鏈結庫中的函式
另,因python與c語言中的資料型別不同,對於string型別,在呼叫c鏈結庫中的函式時,需要使用「c_char_p」對將字串轉換為標準c中的char*型別。
注:ctypes不支援c++的資料型別(如,c++中的string等)。
這樣,乙個最簡單的python呼叫c動態庫就成功了。
C 呼叫C 類庫的幾種方式
1 直接呼叫c 類庫中的公共方法 extern c declspec dllexport int stdcall add int n1,int n2 stdcall表示呼叫約定 引數都是從右向左通過堆疊傳遞,函式呼叫在返回前要由被呼叫者清理堆疊。在c 中,呼叫如下 dllimport private...
C 呼叫VB動態庫方式
首先把vb動態庫引用到bin裡,然後寫乙個類,領進動態庫方法,接著在程式裡呼叫,如下所示 using system using system.collections.generic using system.text using system.runtime.interopservices name...
Python 呼叫 C 動態庫
呼叫c庫而不是c 庫 要注意平台位數對應 解釋型語言自上而下執行 函式類似標籤,縮排表示 塊 一行一條語句時可以不用分號 如何分配一段記憶體等 test python sample 輸入輸出 print hello end print python string input 請輸入 print 你輸...