网站开发 集成包,可以做效果图的网站,建站工作室源码,兰州网站建设流程python调用C程序
一般来说在python调用C/C程序主要可以分为3步#xff1a;
1、编写C/C实现程序。2、将C/C程序编译成动态库。-3、在Python中调用编译生成的库。Python在调用C/C程序时有一些不同#xff0c;需要注意。
Python调用C语言程序比较简单#xff0c;将C语言程序…python调用C程序
一般来说在python调用C/C程序主要可以分为3步
1、编写C/C实现程序。2、将C/C程序编译成动态库。-3、在Python中调用编译生成的库。Python在调用C/C程序时有一些不同需要注意。
Python调用C语言程序比较简单将C语言程序编译好再使用python中的ctypes模块调用即可。
C语言源码called_c.c
#includestdio.hint foo(int a, int b){printf(a:%d, b:%d., a,b);return 0;
}
编译
gcc -o libpycall.so -shared -fPIC called_c.c生成libpycall.so动态库文件之后就可以在Python中调用foo函数
python程序源码如下
import ctypes
dll ctypes.cdll.LoadLibrary
lib dll(./libpycall.so) //刚刚生成的库文件的路径
lib.foo(1, 3)运行既可以完成python中调用C程序
Python调用C类
由于C支持函数重载在g以C方式编译时编译器会给函数的名称附加上额外的信息这样ctypes模块就会找不到g编译生成的函数。因此要让g按照C语言的方式编译才可以找到生成的函数名。让编译器以C语言的方式编译就要在代码中使用extern关键字将代码包裹起来。
C源文件:cpp_called.cpp
//Python调用c(类动态链接库
#include iostream
using namespace std;class TestLib
{public:void display();void display(int a);
};
void TestLib::display() {coutFirst displayendl;
}void TestLib::display(int a) {coutSecond display:endl;
}#这里是中间的一个类里面包含了对外提供的函数display和display_int
extern C {TestLib obj;void display() {obj.display();}void display_int(int a) {obj.display(a);}
}在命令行或者终端输入编译命令
g -o libpycallcpp.so -shared -fPIC cpp_called.cpp生成libpycallcpp.so在Python中调用。Python文件py_call_c.py
import ctypes
dll ctypes.cdll.LoadLibrary
lib dll(./libpycallcpp.so) //刚刚生成的库文件的路径
lib.display()
lib.display_int(0)结果
First display
Second display:0这样就完成了python中调用C程序了