真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python調(diào)用c++代碼的方法-創(chuàng)新互聯(lián)

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

創(chuàng)新互聯(lián)建站堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站設(shè)計、成都網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的潞城網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

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

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

原生態(tài)導(dǎo)出

Python解釋器就是用C實現(xiàn),因此只要我們的C++的數(shù)據(jù)結(jié)構(gòu)能讓Python認識,理論上就是可以被直接調(diào)用的。我們實現(xiàn)test1.cpp如下

#include 
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:生成位置無關(guān)目標代碼,適用于動態(tài)連接;
-L path:表示在path目錄中搜索庫文件,如-L.表示在當前目錄;
-I path:表示在path目錄中搜索頭文件;
-o file:制定輸出文件為file;
-shared:生成一個共享庫文件;

運行Python解釋器,測試如下

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

這里要注意一下幾點

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

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

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

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


分享題目:python調(diào)用c++代碼的方法-創(chuàng)新互聯(lián)
轉(zhuǎn)載源于:http://weahome.cn/article/ddhcoc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部