一般思路Python中内置ctypes库,需调用c编译成的.so文件来实现函数调用。假设我们所需调用的c文件名为test.c,文件里有我们需要的函数func(x,y).将.c文件编译成 .so文件gcc -fPIC -shared test.c -o test.so运行后...

一般思路
Python中内置ctypes库,需调用c编译成的.so文件来实现函数调用。
假设我们所需调用的c文件名为test.c,文件里有我们需要的函数func(x,y).
将.c文件编译成 .so文件
gcc -fPIC -shared test.c -o test.so
运行后会看到有test.so文件生成。
在Python中导入C文件
在当前目录下打开Python
import os
from ctypes import *
p = os.getcwd() + '/test.so’ #表示.so文件的绝对路径,如果你没在当前路径打开python则可能需要修改
f = CDLL(p) #读取.so文件并赋给变量f
这时如果没报错,就说明导入该.so文件成功了,可以调用脚本中的函数。
调用函数
# 变量为整数
a = 3
b = 4
f.func(a, b) #该步即运行函数func(x,y)
# 变量为浮点数
c = c_float(5.5)
d = c_float(6.66)
f.func(c, d)
以上便为调用C中函数的简单形式。
复杂情况
有时,在我们需要的C脚本中,调用了其他的库,或者也同时调用了以 .h形式被调用的同级别的C脚本。这种情况需要以下步骤:
将所有.c文件编译为 .o文件
该步骤就按你的需求去编译生成,但记得加入 -fPIC, 编译后生成一个或多个.o文件。如果你的C脚本只有一个(即并未调用其他同级别C脚本),当然只有1个.o文件。几个C脚本生成几个.o文件。
将所有.o文件编译为.so文件
gcc -shared -o main.so *.o -lfftw3
上述命令将所有的.o文件编译为main.so文件,最后的-lfftw3表示C脚本中调用的其他库,我的是fftw3库,你需要加你自己调用的库名字。运行后可生成main.so文件
运行脚本
如果你需要运行脚本而不是只用某个函数,可直接运行该脚本的 main函数
import os
from ctypes import *
p = os.getcwd() + '/test.so’
f = CDLL(p)
f.main() #运行C脚本中的main函数
本文标题为:在Linux上实现Python调用C语言函数


基础教程推荐
- python multiprocessing-在正在运行的进程上进行类似选择,以查看已完成的进程 2023-11-14
- 在python中使用os.popen转换linux命令 2023-11-12
- Ubuntu在当前用户目录下安装python 包 2023-09-03
- python-多重处理:为什么在复制列表时与子进程共享一个numpy数组? 2023-11-11
- CentOS7 安装 Python3.6 2023-09-04
- Python子进程调用不能使用grep 2023-11-13
- Python详细介绍模型封装部署流程 2022-08-30
- 解决-bash: /usr/bin/yum: /usr/bin/python2.7.15: 坏的解释 2023-09-04
- 在Windows Server 2012上如何处理“ OverflowError:Python int太大而无法转换为C long”错误,如何获得转换? 2023-11-11
- Flask request 对象介绍 2023-08-08