Python调用C语言的方法【基于ctypes模块】

林舟
林舟
发布时间:2026-10-13| 3人浏览过
原创

本文介绍如何使用Python的ctypes模块调用C语言编写的动态链接库。通过示例展示将C代码编译为.so或DLL文件,并在Python中加载库、调用整型和浮点型函数。重点说明原生类型与ctype类型的转换规则,以及该方法的局限性与适用场景。

本文通过具体实例,详细讲解如何在Python中调用C语言代码。内容旨在为读者提供清晰的参考与指导。

在Python生态中,ctypes模块通常被视为调用C语言最简单且高效的方式。该模块提供了与C语言兼容的数据类型及函数接口,支持加载动态链接库(dll)文件。由于无需对原始C源代码进行任何修改即可直接调用,这极大地简化了集成过程,奠定了该方法简便易用的基础。

具体实现示例如下所示。

首先编写实现两数求和功能的C语言代码,并将其保存为文件 add.c。

//sample C file to add 2 numbers - int and floats
#include <stdio.h>
int add_int(int, int);
float add_float(float, float);
int add_int(int num1, int num2){
  return num1 + num2;
}
float add_float(float num1, float num2){
  return num1 + num2;
}

随后,需要将C源文件编译生成动态链接库文件(在Linux和Mac系统中为.so文件,Windows系统中为DLL文件)。执行以下编译命令即可生成对应的库文件(例如adder.so)。

#For Linux
$ gcc -shared -Wl,-soname,adder -o adder.so -fPIC add.c
#For Mac
$ gcc -shared -Wl,-install_name,adder.so -o adder.so -fPIC add.c
#For windows
$
gcc -shared -Wl,-soname,adder -o adder.dll -fPIC add.c

完成编译后,即可在Python脚本中加载并调用该库。

from ctypes import *
#load the shared object file
adder = CDLL('./adder.so')
#Find sum of integers
res_int = adder.add_int(4,5)
print "Sum of 4 and 5 = " + str(res_int)
#Find sum of floats
a = c_float(5.5)
b = c_float(4.1)
add_float = adder.add_float
add_float.restype = c_float
print "Sum of 5.5 and 4.1 = ", str(add_float(a, b))

运行上述Python代码后,终端输出结果如下。

Sum of 4 and 5 = 9
Sum of 5.5 and 4.1 = 9.60000038147

本示例中的C代码逻辑直观,主要包含两个函数:一个用于实现整型数据的求和,另一个用于实现浮点型数据的求和。

在Python脚本中,首先导入ctypes模块,接着使用CDLL函数加载之前生成的库文件。此时,可以通过变量adder访问C库中的函数。当调用adder.add_int()时,底层会自动发起对C函数add_int的调用。ctypes接口支持在调用C函数时直接使用Python默认的字符串和整型数据。

对于布尔型、浮点型等其他数据类型,必须使用ctypes中对应的类型进行定义才能正确传递。例如,在调用adder.add_float()函数时,需要先将Python中的十进制数值转换为c_float类型,然后再传递给C函数。尽管这种方法简单直观,但其局限性也较为明显,例如无法直接在C代码中操作复杂的Python对象。

如果您对Python其他高级应用感兴趣,推荐查阅本站相关专题:《Python进程与线程操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》以及《Python文件与目录操作技巧汇总》。

希望本文的内容能对您的Python编程实践有所帮助。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。