Python 和 C語言的相互呼叫

2022-09-18 22:09:21 字數 3445 閱讀 7326

第一種、python呼叫c動態鏈結庫(利用ctypes)

下面示例在linux或unix下可行。

pycall.c12

3456

78/***gcc -o libpycall.so -shared -fpic pycall.c*/

#include

#include

intfoo(inta,intb)

pycall.py12

345importctypes

ll=ctypes.cdll.loadlibrary

lib=ll("./libpycall.so")

lib.foo(1,3)

print'***finish***'

執行方法:

gcc -o libpycall.so -shared -fpic pycall.c

python pycall.py

第2種、python呼叫c++(類)動態鏈結庫(利用ctypes)

pycallclass.cpp12

3456

78910

1112

1314

1516

1718

1920

2122

2324

25#include

usingnamespacestd;

classtestlib

;

voidtestlib::display()

voidtestlib::display(inta)

extern"c"

voiddisplay_int()

}

pycallclass.py12

3456

7importctypes

so=ctypes.cdll.loadlibrary

lib=so("./libpycallclass.so")

print'display()'

lib.display()

print'display(100)'

lib.display_int(100)

執行方法:

g++ -o libpycallclass.so -shared -fpic pycallclass.cpp

python pycallclass.py

第3種、python呼叫c和c++可執行程式

main.cpp12

3456

78910

1112

1314

#include

usingnamespacestd;

inttest()

intmain()

main.py12

3456

78910

1112

1314

15importcommands

importos

main="./testmain"

ifos.path.exists(main):

rc, out=commands.getstatusoutput(main)

print'rc = %d, \nout = %s'%(rc, out)

print'*'*10

f=os.popen(main)

data=f.readlines()

f.close()

printdata

print'*'*10

os.system(main)

執行方法(只有這種不是生成.so然後讓python檔案來呼叫):

g++ -o testmain main.cpp

python main.py

疑問:windows 如何實現?

ref

C和C 相互呼叫

c和c 相互呼叫 2011 11 01 18 42 29 分類 c c 在專案中融合c和c 有時是不可避免的,在呼叫對方的功能函式的時候,或許會出現這樣那樣的問題。近來在主程式是c語言,而呼叫c 功能函式的時候,c 的 h標頭檔案都能找到,功能函式也都定義了,最重要的是,單獨編譯c 的時候完全沒有問...

C 和C的相互呼叫

在c專案中融合c 和c的 是實際工程中不可避免的,就如一般底層的驅動是用c寫的,而應用層一般會用c c 的編譯器能相容c語言的編譯器,但他優先以c 的方式編譯 extern關鍵字強制讓c 編譯器對 進行c方式編譯注意 cplusplus 是c 編譯器都內建的乙個巨集,可以用來判斷是不是c 編譯器,那...

C 和C的相互呼叫

在實際的工程中,c 和c的相互呼叫時不可避免的。但是有時候用c語言的編譯器編譯成的軟體包,在c 的程式中呼叫會出現錯誤。先看一下乙個例子 add.c include add.h int add int a,int b add.h int add int a,int b 將這兩個檔案用c語言編譯器編譯...