Python调用C语言:ctypes模块实现与编译指南

方予
方予
发布时间:2026-10-12| 3人浏览过
原创

本文介绍如何利用Python的ctypes模块调用C语言编写的函数。通过编写C代码、编译为动态链接库(.so或.dll),并在Python中加载该库,即可直接调用C函数。文章详细说明了整数与浮点数的类型映射、编译命令及注意事项,帮助开发者实现跨语言的高效交互。

核心原理与优势

Python提供了ctypes模块,该模块允许Python代码与C语言编写的库进行交互。使用ctypes调用C库的主要优势在于无需修改C语言的源代码,只需将其编译为动态链接库文件(在Linux/macOS下为.so文件,Windows下为.dll文件),即可在Python中直接调用其中的函数。

实现步骤

1. 编写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;

}

2. 编译C代码为动态链接库

使用GCC编译器将C源文件编译为共享库。不同操作系统下的编译命令略有差异:

  • Linux系统:
#For Linux
$ gcc -shared -Wl,-soname,adder -o adder.so -fPIC add.c
  • macOS系统:
#For Mac
$ gcc -shared -Wl,-install_name,adder.so -o adder.so -fPIC add.c
  • Windows系统:
#For windows
$
gcc -shared -Wl,-soname,adder -o adder.dll -fPIC add.c

注意:编译时需确保生成正确的库文件(如adder.so或adder.dll)。

3. 在Python中调用C函数

在Python脚本中,导入ctypes模块并使用CDLL加载编译好的库文件。加载后,即可像调用普通Python函数一样调用C函数。

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))

类型映射与注意事项

ctypes模块允许使用Python默认的字符串型和整型直接对应C语言中的基本类型。然而,对于布尔型和浮点型,必须使用ctypes提供的正确类型进行转换:

  • 浮点数需使用c_float类型。
  • 调用浮点函数时,需显式指定返回值类型(restype)为c_float。

此外,ctypes接口目前不支持直接操作C语言中的复杂对象,仅适用于基本数据类型和简单函数的调用。

以上就是Python调用C语言的详细内容,更多关于Python与C语言交互的资料请关注本站其它相关文章!

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

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 算法库。