亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python調用c++代碼的方法

發布時間:2020-09-23 09:53:17 來源:億速云 閱讀:351 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關python調用c++代碼的方法的內容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。

大家都知道Python的優點是開發效率高,使用方便,C++則是運行效率高,這兩者可以相輔相成,不管是在Python項目中嵌入C++代碼,或是在C++項目中用Python實現外圍功能,都可能遇到Python調用C++模塊的需求.

下面列舉出集中c++代碼導出成Python接口的方法,一起來學習學習吧。

原生態導出

Python解釋器就是用C實現,因此只要我們的C++的數據結構能讓Python認識,理論上就是可以被直接調用的。我們實現test1.cpp如下

#include <Python.h>
int Add(int x, int y)
{
return x + y;
}
int Del(int x, int y)
{
return x - y;
}
PyObject* WrappAdd(PyObject* self, PyObject* args)
{
int x, y;
if (!PyArg_ParseTuple(args, "ii", &x, &y))
{
return NULL;
}
return Py_BuildValue("i", Add(x, y));
}
PyObject* WrappDel(PyObject* self, PyObject* args)
{
int x, y;
if (!PyArg_ParseTuple(args, "ii", &x, &y))
{
return NULL;
}
return Py_BuildValue("i", Del(x, y));
}
static PyMethodDef test_methods[] = {
{"Add", WrappAdd, METH_VARARGS, "something"},
{"Del", WrappDel, METH_VARARGS, "something"},
{NULL, NULL}
};
extern "C"
void inittest1()
{
Py_InitModule("test1", test_methods);   
}

編譯命令如下

g++ -fPIC -shared test1.cpp -I/usr/include/python2.7 -o test1.so

-fPIC:生成位置無關目標代碼,適用于動態連接;
-L path:表示在path目錄中搜索庫文件,如-L.表示在當前目錄;
-I path:表示在path目錄中搜索頭文件;
-o file:制定輸出文件為file;
-shared:生成一個共享庫文件;

運行Python解釋器,測試如下

>>> import test1
>>> test1.Add(1,2)
3

這里要注意一下幾點

如果生成的動態庫名字為test1,則源文件里必須有inittest1這個函數,且Py_InitModule的第一個參數必須是“test1”,否則Python導入模塊會失敗

如果是cpp源文件,inittest1函數必須用extern "C"修飾,如果是c源文件,則不需要。原因是Python解釋器在導入庫時會尋找initxxx這樣的函數,而C和C++對函數符號的編碼方式不同,C++在對函數符號進行編碼時會考慮函數長度和參數類型,具體可以通過nm test1.so查看函數符號,c++filt工具可通過符號反解出函數原型

感謝各位的閱讀!關于python調用c++代碼的方法就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

昌黎县| 托克逊县| 昆山市| 内丘县| 井陉县| 犍为县| 阿拉善盟| 仲巴县| 葫芦岛市| 双柏县| 西城区| 泰州市| 乐业县| 镇远县| 安国市| 中卫市| 林芝县| 甘德县| 图木舒克市| 抚顺县| 凤阳县| 义马市| 辽中县| 三都| 田阳县| 南乐县| 厦门市| 永和县| 会泽县| 黄梅县| 河北区| 安宁市| 平遥县| 临高县| 涪陵区| 普兰店市| 郧西县| 两当县| 舒兰市| 冷水江市| 芷江|