python呼叫c庫的方式

2021-06-29 03:44:56 字數 1183 閱讀 4052

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 你輸...