第一種、python呼叫c動態鏈結庫(利用ctypes)
下面示例在linux或unix下可行。
pycall.c12
3456
78/***gcc -o libpycall.so -shared -fpic pycall.c*/
#include
#include
int
foo(
int
a,
int
b)
pycall.py12
345import
ctypes
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
using
namespace
std;
class
testlib
;
void
testlib::display()
void
testlib::display(
int
a)
extern
"c"
void
display_int()
}
pycallclass.py12
3456
7import
ctypes
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
using
namespace
std;
int
test()
int
main()
main.py12
3456
78910
1112
1314
15import
commands
import
os
main
=
"./testmain"
if
os.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()
print
data
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語言編譯器編譯...