Linux Python调用so文件

在Linux系统中,Python可以使用C语言编写的共享库(.so文件)来扩展其功能。本文将介绍如何在Python中调用so文件,并提供相关的代码示例。

什么是共享库(.so文件)?

共享库,也称为动态链接库,是一种可被多个程序共享使用的可执行代码和数据的集合。它们包含了一些特定的函数和变量,可以为其他程序提供服务。

共享库的好处在于它们可以减小可执行文件的体积,并且当共享库发生更新时,不需要重新编译使用了该库的程序。

在Linux系统中,共享库的扩展名通常为.so。Python可以使用C编写的.so文件来扩展其功能。

Python调用so文件的方法

Python提供了ctypes模块来调用C编写的共享库。ctypes模块为Python提供了一种与C代码交互的方式,可以加载并调用共享库中的函数。

以下是一个简单的示例,演示了如何在Python中调用一个名为example.so的共享库。

import ctypes

# 加载共享库
example = ctypes.CDLL('./example.so')

# 调用共享库中的函数
result = example.add(1, 2)
print(result)

在上面的示例中,我们首先使用ctypes.CDLL函数加载名为example.so的共享库。然后,我们可以使用加载的库访问其中定义的函数。

编写共享库

现在我们来编写一个简单的共享库,供Python调用。

#include <stdio.h>

int add(int a, int b) {
    return a + b;
}

void hello() {
    printf("Hello, World!\n");
}

上述代码定义了一个add函数和一个hello函数。add函数接收两个整数作为参数,并返回它们的和。hello函数打印一条简单的问候语。

我们可以使用gcc编译器将上述代码编译为共享库。运行以下命令将其编译为example.so文件:

gcc -shared -o example.so example.c

完整示例

下面是一个完整的示例,演示了如何在Python中调用我们刚刚编写的共享库。

import ctypes

# 加载共享库
example = ctypes.CDLL('./example.so')

# 调用共享库中的函数
result = example.add(1, 2)
print(result)

example.hello()

运行上述代码,将输出以下结果:

3
Hello, World!

总结

本文介绍了如何在Linux系统中使用Python调用C编写的共享库(.so文件)。我们使用了Python的ctypes模块,通过加载共享库并调用其中的函数,实现了Python对共享库的访问。

希望本文对您理解Python调用so文件的过程有所帮助。通过使用共享库,我们可以扩展Python的功能,并与C代码进行交互,实现更复杂的功能。

参考代码:[GitHub链接](