一般来说在python调用C/C程序主要可以分为3步1、编写C/C实现程序。- 2、将C/C程序编译成动态库。- 3、在Python中调用编译生成的库。Python在调用C/C程序时有一些不同需要注意。1、Python调用C函数Python调用C语言程序比较简单将C语言程序编译好再使用python中的ctypes模块调用即可。C语言源文件called_c.c代码语言javascriptAI代码解释//编译命令 gcc -o libpycall.so -shared -fPIC called_c.c #includelt;stdio.hgt; int foo(int a, int b){!-- -- printf(a:%d, b:%d., amp;a, amp;b); return 0; }在命令行或者终端输入代码语言javascriptAI代码解释gcc -o libpycall.so -shared -fPIC called_c.c生成libpycall.so动态库文件之后就可以在Python中调用foo函数。Python文件py_call_c.py代码语言javascriptAI代码解释import ctypes dll ctypes.cdll.LoadLibrary lib dll(./libpycall.so) //刚刚生成的库文件的路径 lib.foo(1, 3)运行py_call_c.py输出为代码语言javascriptAI代码解释a:1, b:32、Python调用C类由于C支持函数重载在g以C方式编译时编译器会给函数的名称附加上额外的信息这样ctypes模块就会找不到g编译生成的函数。因此要让g按照C语言的方式编译才可以找到生成的函数名。让编译器以C语言的方式编译就要在代码中使用extern关键字将代码包裹起来。C源文件:cpp_called.cpp代码语言javascriptAI代码解释//Python调用c(类动态链接库 #include lt;iostreamgt; using namespace std; class TestLib {!-- -- public: void display(); void display(int a); }; void TestLib::display() {!-- -- coutlt;lt;First displaylt;lt;endl; } void TestLib::display(int a) {!-- -- coutlt;lt;Second display:lt;lt;alt;lt;endl; } extern C {!-- -- TestLib obj; void display() {!-- -- obj.display(); } void display_int(int a) {!-- -- obj.display(a); } }在命令行或者终端输入编译命令代码语言javascriptAI代码解释g -o libpycallcpp.so -shared -fPIC cpp_called.cpp编译参数说明 -fPIC生成位置无关目标代码适用于动态连接-L path表示在path目录中搜索库文件如-L.表示在当前目录-I path表示在path目录中搜索头文件-o file制定输出文件为file-shared生成一个共享库文件生成libpycallcpp.so在Python中调用。Python文件py_call_c.py代码语言javascriptAI代码解释import ctypes dll ctypes.cdll.LoadLibrary lib dll(./libpycallcpp.so) //刚刚生成的库文件的路径 lib.display() lib.display_int(0)输出为代码语言javascriptAI代码解释First display Second display:0OK基本功能实现高级调用后期在填坑