如何让python调用C和C代码二、Python调用C/C1、Python调用C动态链接库Python调用C库比较简单,不经过任何封装打包成so,再使用python的ctypes调用即可 。(1)C语言文件:pycall.c[html]viewplaincopy/***gcc-olibpycall.so-shared-fPICpycall.c*/#include#includeintfoo(inta,intb){printf("youinput趎d%d\n",a,b);returna b;}(2)gcc编译生成动态库libpycall.so:gcc-olibpycall.so-shared-fPICpycall.c 。使用g编译生成C动态库的代码中的函数或者方法时,需要使用extern"C"来进行编译 。(3)Python调用动态库的文件:pycall.py[html]viewplaincopyimportctypesll=ctypes.cdll.LoadLibrarylib=ll("./libpycall.so")lib.foo(1,3)print'***finish***'(4)运行结果:2、Python调用C(类)动态链接库需要extern"C"来辅助,也就是说还是只能调用C函数,不能直接调用方法,但是能解析C方法 。不是用extern"C",构建后的动态链接库没有这些函数的符号表 。(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
怎样让Python脚本与C程序互相调用二、Python调用C/C\x0d\x0a\x0d\x0a\x0d\x0a1、Python调用C动态链接库\x0d\x0a\x0d\x0aPython调用C库比较简单,不经过任何封装打包成so , 再使用python的ctypes调用即可 。\x0d\x0a(1)C语言文件: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\x0aprintf("you input %d and %d\n", a, b);\x0d\x0areturn a b;\x0d\x0a}\x0d\x0a(2)gcc编译生成动态库libpycall.so:gcc -o libpycall.so -shared -fPIC pycall.c 。使用g编译生成C动态库的代码中的函数或者方法时,需要使用extern "C"来进行编译 。\x0d\x0a(3)Python调用动态库的文件: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)运行结果:\x0d\x0a\x0d\x0a\x0d\x0a2、Python调用C(类)动态链接库 \x0d\x0a\x0d\x0a需要extern "C"来辅助,也就是说还是只能调用C函数,不能直接调用方法,但是能解析C方法 。不是用extern "C",构建后的动态链接库没有这些函数的符号表 。\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\x0apublic:\x0d\x0avoid display();\x0d\x0avoid display(int a);\x0d\x0a};\x0d\x0avoid TestLib::display() {\x0d\x0acout\x0d\x0ausing namespace std;\x0d\x0aint test()\x0d\x0a{\x0d\x0aint a = 10, b = 5;\x0d\x0areturn a b;\x0d\x0a}\x0d\x0aint main()\x0d\x0a{\x0d\x0acout\x0d\x0a#include\x0d\x0a#include\x0d\x0a\x0d\x0aint fac(int n)\x0d\x0a{\x0d\x0aif (n
回答于 2022-11-16
python 调用c函数里面的函数吗若你是想调用 c 编写的DLL,可以使用ctypes调入使用;
#!/usr/bin/python
from ctypes import *
import os
#需要使用绝对路径
extest = cdll.LoadLibrary(os.getcwd()'/DemoC.so')
或在windows下
#!/usr/bin/python
import ctypes
import os
if os.name == 'nt': # windows系统
_lib_name = os.getcwd()'/DemoC.DLL'
dl200_lib = ctypes.WinDLL(dl200_lib_name)
python使用ctypes调用C编译dll函数方法在函数声明加入前缀 , 如
__declspec(dllexport) int Fun(int a, int b)
否则在加载该dll时会提示找不到该符号
在windows下可以通过vs自带的dumpbin工具查看可被调用符号
dumpbin /exports test.dll
C函数在调用过程中关于参数传递和压栈由多种规定,作为dll提供给其他程序调用时 , 必须明确并统一为同一种调用规定,否则会导致栈破坏,编译器负责具体实现调用规定 , 主要有以下几种调用规定
python下调用C库有多种方式,ctypes是其中一种比较方便的,调用时首先需要加载dll文件,根据C dll的调用规定不同需要使用不同接口,使用ctypes需要 import ctypes 库
对于简单的C函数 , 例如 int add(int a, int b) , 此时就可以直接调用了,如
对于较复杂的C函数的参数情况,ctypes调用时对入参和出餐做一定处理,这里分情况讨论
以上包含了几种主要的参数传递情况,ctypes也提供了一个较为完整的python类型和C类型的对照,如下:
python使用C函数返回的指针int* GrabImage();
int GetPixel(int* image, int x, int y);
void SetPixel(int* image, int x, int y, int color);
【python使用c函数的简单介绍】python使用c函数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、python使用c函数的信息别忘了在本站进行查找喔 。
推荐阅读
- 无人机天空素材直播软件,无人机天空素材直播软件哪个好
- 怎么用linux命令,怎么用linux命令解压zip文件
- 在服务里面无法手动启动mysql57,在服务里面无法手动启动mysql57怎么回事
- 路由器怎么设置下载,路由器设置下载软件
- php提交接收数据 php提交数据到另一个php
- 新媒体如何做运营,新媒体如何做运营工作
- 死神即时战斗游戏,死神对战
- 电脑怎么改成从硬盘启动,电脑怎么改成从硬盘启动的软件
- 外置windows7系统的简单介绍