近日需要用python寫一個接口來調用c++項目。在網上找了一些方法感覺較爲紊亂,其實python調用c本身就是較爲簡單的,因爲python就是用c寫的呀!主要方法就是在python中調用ctypes包,使用相關api調用項目編譯生成的.so文件(類似於動態鏈接庫)。
唯一需要注意的就是在c++文件裏需要將調用的函數用
extern "C"{
void c_change(int ii, int graphk, char *filen){ // 該函數需要接受三個參數
change(ii, graphk, filen);
}
}
進行聲明。原因是python只能調c函數。
之後進行編譯時要附加一些選項:
g++ -o name.so -g main.cpp test1.cpp ..... -lm -shared -fPIC
之後你就可以愉快的在python裏去調用c++函數啦!
python代碼如下:
from ctypes import *
import numpy as np
# 該函數的參數表示c++項目中的輸入參數
def ex_cpp(II, graph_kind, file_name):
so = cdll.LoadLibrary
# 調change函數
# int change(int ii, int graphk, char * filen);
lib = so("./name.so")
change = lib.c_change
change.argtypes = [c_int, c_int, POINTER(c_char)] # 代表參數類型
str_ = bytes(file_name,'utf-8')
# 傳遞字符串的方法
cast(str_, POINTER(c_char))
change(c_int(II), c_int(graph_kind), str_)
lib.main()