linux下python3調用c++的方法並傳遞參數

近日需要用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()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章