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

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

python里調(diào)用c函數(shù),Python調(diào)用c函數(shù)

如何讓python調(diào)用C和C++代碼

二、Python調(diào)用C/C++1、Python調(diào)用C動(dòng)態(tài)鏈接庫(kù)Python調(diào)用C庫(kù)比較簡(jiǎn)單,不經(jīng)過(guò)任何封裝打包成so,再使用python的ctypes調(diào)用即可。(1)C語(yǔ)言文件:pycall.c[html]viewplaincopy/***gcc-olibpycall.so-shared-fPICpycall.c*/#include#includeintfoo(inta,intb){printf("youinput%dand%d\n",a,b);returna+b;}(2)gcc編譯生成動(dòng)態(tài)庫(kù)libpycall.so:gcc-olibpycall.so-shared-fPICpycall.c。使用g++編譯生成C動(dòng)態(tài)庫(kù)的代碼中的函數(shù)或者方法時(shí),需要使用extern"C"來(lái)進(jìn)行編譯。(3)Python調(diào)用動(dòng)態(tài)庫(kù)的文件:pycall.py[html]viewplaincopyimportctypesll=ctypes.cdll.LoadLibrarylib=ll("./libpycall.so")lib.foo(1,3)print'***finish***'(4)運(yùn)行結(jié)果:2、Python調(diào)用C++(類)動(dòng)態(tài)鏈接庫(kù)需要extern"C"來(lái)輔助,也就是說(shuō)還是只能調(diào)用C函數(shù),不能直接調(diào)用方法,但是能解析C++方法。不是用extern"C",構(gòu)建后的動(dòng)態(tài)鏈接庫(kù)沒(méi)有這些函數(shù)的符號(hào)表。(1)C++類文件:pycallclass.cpp[html]viewplaincopy#includeusingnamespacestd;classTestLib{public:voiddisplay();voiddisplay(inta);};voidTestLib::display(){cout#include#includeintfac(intn){if(n2)return(1);/*0!==1!==1*/return(n)*fac(n-1);/*n!==n*(n-1)!*/}char*reverse(char*s){registerchart,/*tmp*/*p=s,/*fwd*/*q=(s+(strlen(s)-1));/*bwd*/while(p

創(chuàng)新互聯(lián)是專業(yè)的寧江網(wǎng)站建設(shè)公司,寧江接單;提供網(wǎng)站制作、做網(wǎng)站,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行寧江網(wǎng)站開發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!

python 字典調(diào)用C++函數(shù)

使用Python的ctypes,我們可以直接調(diào)用由C直接編譯出來(lái)的函數(shù)。其實(shí)就是調(diào)用動(dòng)態(tài)鏈接庫(kù)中的函數(shù)。為什么我們需要這樣做呢,因?yàn)橛行r(shí)候,我們可能需要一個(gè)性能上比較講究的算法,有些時(shí)候,我們可以在Python中使用已經(jīng)有了的現(xiàn)成的被封閉在動(dòng)態(tài)鏈接庫(kù)中的函數(shù)。下面是如何調(diào)用的示例。

首先,我們用一個(gè)乘法來(lái)表示一個(gè)算法功能。下面是C的程序:

int?multiply(int?num1,?int?num2){???

return?num1?*?num2;

}????

如果在Windows下,你可能需要寫成下面這個(gè)樣子:

#include?windows.h?

BOOL?APIENTRYDll

Main(HANDLE?hModule,?DWORD?dwReason,?LPVOID?lpReserved){????

return?TRUE;

}?

__declspec(dllexport)?

intmultiply(int?num1,?int?num2){?

return?num1?*?num2;

}????

然后,自然是把這個(gè)C文件編成動(dòng)態(tài)鏈接庫(kù):

Linux下的編譯:

gcc?-c?-fPIC?libtest.c

gcc?-shared?libtest.o?-o?libtest.so????

Windows下的編譯:

cl?-LD?libtest.c?-libtest.dll????

于是在我們的Python中可以這樣使用:

(其中的libtest.so在Windows下改成libtest.dll即可)

from?ctypes?import?*

import?os

libtest?=?cdll.LoadLibrary(os.getcwd()?+?'/libtest.so')

print?libtest.multiply(2,?2)4????

注意:上面的Python腳本中需要把動(dòng)態(tài)鏈接庫(kù)放到當(dāng)前目錄中。

怎樣讓Python腳本與C++程序互相調(diào)用

二、Python調(diào)用C/C++\x0d\x0a\x0d\x0a\x0d\x0a1、Python調(diào)用C動(dòng)態(tài)鏈接庫(kù)\x0d\x0a\x0d\x0a Python調(diào)用C庫(kù)比較簡(jiǎn)單,不經(jīng)過(guò)任何封裝打包成so,再使用python的ctypes調(diào)用即可。\x0d\x0a(1)C語(yǔ)言文件:pycall.c\x0d\x0a\x0d\x0a[html] view plain copy \x0d\x0a/***gcc -o libpycall.so -shared -fPIC pycall.c*/ \x0d\x0a#include \x0d\x0a#include \x0d\x0aint foo(int a, int b) \x0d\x0a{ \x0d\x0a printf("you input %d and %d\n", a, b); \x0d\x0a return a+b; \x0d\x0a} \x0d\x0a(2)gcc編譯生成動(dòng)態(tài)庫(kù)libpycall.so:gcc -o libpycall.so -shared -fPIC pycall.c。使用g++編譯生成C動(dòng)態(tài)庫(kù)的代碼中的函數(shù)或者方法時(shí),需要使用extern "C"來(lái)進(jìn)行編譯。\x0d\x0a(3)Python調(diào)用動(dòng)態(tài)庫(kù)的文件:pycall.py\x0d\x0a\x0d\x0a[html] view plain copy \x0d\x0aimport ctypes \x0d\x0all = ctypes.cdll.LoadLibrary \x0d\x0alib = ll("./libpycall.so") \x0d\x0alib.foo(1, 3) \x0d\x0aprint '***finish***' \x0d\x0a(4)運(yùn)行結(jié)果:\x0d\x0a\x0d\x0a\x0d\x0a2、Python調(diào)用C++(類)動(dòng)態(tài)鏈接庫(kù) \x0d\x0a\x0d\x0a 需要extern "C"來(lái)輔助,也就是說(shuō)還是只能調(diào)用C函數(shù),不能直接調(diào)用方法,但是能解析C++方法。不是用extern "C",構(gòu)建后的動(dòng)態(tài)鏈接庫(kù)沒(méi)有這些函數(shù)的符號(hào)表。\x0d\x0a(1)C++類文件:pycallclass.cpp\x0d\x0a\x0d\x0a[html] view plain copy \x0d\x0a#include \x0d\x0ausing namespace std; \x0d\x0a \x0d\x0aclass TestLib \x0d\x0a{ \x0d\x0a public: \x0d\x0a void display(); \x0d\x0a void display(int a); \x0d\x0a}; \x0d\x0avoid TestLib::display() { \x0d\x0a cout \x0d\x0ausing namespace std; \x0d\x0aint test() \x0d\x0a{ \x0d\x0a int a = 10, b = 5; \x0d\x0a return a+b; \x0d\x0a} \x0d\x0aint main() \x0d\x0a{ \x0d\x0a cout \x0d\x0a#include \x0d\x0a#include \x0d\x0a \x0d\x0aint fac(int n) \x0d\x0a{ \x0d\x0a if (n

回答于?2022-11-16


本文題目:python里調(diào)用c函數(shù),Python調(diào)用c函數(shù)
網(wǎng)頁(yè)路徑:http://weahome.cn/article/dsegiji.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部