Python基于ctypes调用C程序

it2025-05-21  15

文章目录

1 查看Python和gcc位数2 编译.so文件3 Python中调用4 说明参考文献

1 查看Python和gcc位数

  首先需要保证Python与gcc的位数一致 (已知位数一致可以跳过该节):   1)查看Python位数:   Python环境中输入以下代码:

import platform platform.architecture()

  输出如下:

('64bit', 'WindowsPE')

  2)查看gcc位数:   CMD命令行中输入以下命令:

gcc -v

  注意到输出中有以下:

gcc version 8.1.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project)

  我的Python与gcc的位数是一致的,无需更改。   不一致时,请保持一致。当然,重新下载MinGw要简单些,可以前往以下博客查询帮助:   https://blog.csdn.net/qq153471503/article/details/84494090

2 编译.so文件

  1)以以下测试代码为例:

/*** gcc -o D:\Program\Code\C\test\test.so -shared -fPIC D:\Program\Code\C\test\test.c */ #include <stdio.h> #include <stdlib.h> int myAdd(int a, int b) { return a+b; }

  2)于CMD中输入以下命令:

#格式为:gcc -o 保存路径.so -shared -fPIC 读取路径.c gcc -o D:\Program\Code\C\test\test.so -shared -fPIC D:\Program\Code\C\test\test.c

  文件生成成功:

3 Python中调用

  调用示例如下:

import ctypes if __name__ == '__main__': temp_path = "../CLib/test.so" # c_lib = ctypes.cdll.LoadLibrary(temp_path) c_lib = ctypes.CDLL(temp_path) print(c_lib.myAdd(1, 2))

  输出3说明调用成功。   这一步可能出错,可以尝试使用:

#-m64强制指定位数 gcc -o D:\Program\Code\C\test\test.so -shared -fPIC D:\Program\Code\C\test\test.c -m64

4 说明

  这里对参数的传递进行简单说明。例如,当myAdd函数所需参数是两个C中的float型,那么需要使用ctypes.c_float(1)来指定类型。   ctypes库的优势在于内置在python中,对于最初的练习很有帮助,但是随着任务的复杂化,该库的使用将变得相对繁琐。

参考文献

[1] https://blog.csdn.net/budding0828/article/details/89344888 [2] https://blog.csdn.net/qq1083062043/article/details/86638619 [3] https://blog.csdn.net/qq153471503/article/details/84494090 [4] https://blog.csdn.net/weixin_30372371/article/details/98428391?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param

最新回复(0)