文档章节

python3中调用C语言的函数

独钓渔
 独钓渔
发布于 2015/11/17 10:39
字数 204
阅读 503
收藏 6

一, 先用C语言写好一个函数库

#include<stdio.h>
int add(int num1, int num2)
{
	return num1 + num2;
}

int sub(int num1, int num2)
{
	return num1 - num2;
}

int mul(int num1, int num2)
{
	return num1 * num2;
}

int div(int num1, int num2)
{
	return num1 / num2;
}


二, 然后使用gcc编译成静态库

gcc -c -fPIC math.c
gcc -shared math.o -o math.so

三, 使用python的ctypes库导入该静态库

#!/opt/python3/bin/python3
#
from ctypes import *
import os

print("begin ......")
libmathpath = os.path.join(os.getcwd(),"math.so")
print(libmathpath)
libmath = CDLL(libmathpath)
print("-----------------")
print(" ADD: 21 89")
print(libmath.add(21,89))
print("-----------------")
print(" SUB: 124 89")
print(libmath.sub(123,89))
print("-----------------")
print(" MUL: 12 77")
print(libmath.mul(12,77))
print("-----------------")
print(" DIV: 183 3")
print(libmath.div(183,3))
print("-----------------")


4, 执行结果如下:

begin ......
/home/git/math.so
-----------------
 ADD: 21 89
110
-----------------
 SUB: 124 89
34
-----------------
 MUL: 12 77
924
-----------------
 DIV: 183 3
61
-----------------


如图1(math.c源码)

如图2(testmath.py)源码

 

如图3(执行结查)

 

© 著作权归作者所有

共有 人打赏支持
独钓渔
粉丝 47
博文 375
码字总数 142587
作品 0
沙坪坝
系统管理员
私信 提问
C/C++ 和 Python混合编程

链接:https://www.zhihu.com/question/23003213/answer/56121859 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 #include int main(int argc, char *...

sirius_0
04/21
0
0
SWIG入门7: 如何用Python封装C语言的字符串处理函数

在C语言中,字符串处理是每天都要面对的问题。我们都知道C语言中其实并没有一种原生的字符串类型,‘字符串’在C语言里只是一种特殊的以'0'结尾的字符数组。因此,如何将C语言与更高层次的P...

costaxu
2012/11/10
0
0
linux下c语言调用python方法问题

linux下c语言调用python接口,我有二个问题: 1、网上查资料都是c语言调用python函数的方法,有没有可以调用python类的? 2、调用过程中,c语言有设置超时的机制吗?比如我调用python里的一个...

陈舵主
2013/03/12
1K
2
SWIG入门3: C/C++初级特性

众所周知,SWIG这个项目建立的原因,是为大家提供简洁而又自然的脚本语言接口。什么是简洁而自然呢?它的意思就是C/C++的函数就直接被封装为python的函数,class就被封装成python的class。 ...

costaxu
2012/08/11
0
2
linux下使用 boost.python 调用c++动态库

最近开始使用 robot framework 测试c++的动态库,robot framework 是跑在 windows 上面,c++动态库是跑在远程linux主机上面。测试办法是让 robot framework 通过 SSHLIbrary 库执行远程机器上...

问天小凯
08/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

sed插入和附加文本基础使用

对于编辑器来说,在数据中增加行算是很基本的操作吧,sed有以下两个操作: 插入(insert)命令(i)会在指定行前增加一个新行 附加(append)命令(a)会在指定行后增加一个新行 还是用下面的文本来测...

woshixin
14分钟前
0
0
HIVE数据倾斜总结

在做Shuffle阶段的优化过程中,遇到了数据倾斜的问题,造成了对一些情况下优化效果不明显。主要是因为在Job完成后的所得到的Counters是整个Job的总和,优化是基于这些Counters得出的平均值,...

瑞查德-Jack
24分钟前
0
0
Pure-ftpd搭建FTP

12月11日任务 15.4 xshell使用xftp传输文件 15.5 使用pure-ftpd搭建ftp服务 使用pure-ftpd搭建FTP服务 轻量的ftp软件 安装pure-ftpd并修改配置文件 # pure-ftpd为epel扩展库里的软件[root...

robertt15
33分钟前
3
0
开源 serverless 产品原理剖析(二) - Fission

背景 本文是开源 serverless 产品原理剖析系列文章的第二篇,关于 serverless 背景知识的介绍可参考文章开源 serverless 产品原理剖析(一) - Kubeless,这里不再赘述。 Fission 简介 Fiss...

阿里云官方博客
40分钟前
2
0
Android面试整理(附答案)

面试,无非都是问上面这些问题(挺多的 - -!),聘请中高级的安卓开发会往深的去问,并且会问一延伸二。以下我先提出几点重点,是面试官基本必问的问题,请一定要去了解! 基础知识 – 四大组...

终端研发部
44分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部