Python调用C语言开发的共享库方法实例


Posted in Python onMarch 18, 2015

在helloworld工程中,编写了一个简单的两个数值相加的程序,编译成为共享库后,如何使用python对其进行调用呢?

使用ll命令列出当前目录下的共享库,其中共享库名为libhelloworld.so.0.0.0

ufo@ufo:~/helloworld/.libs$ ll

总用量 32

drwxr-xr-x 2 ufo ufo 4096  1月 29 14:54 ./

drwxr-xr-x 6 ufo ufo 4096  1月 29 16:08 ../

-rw-r--r-- 1 ufo ufo 3816  1月 29 14:54 helloworld.o

-rw-r--r-- 1 ufo ufo 3956  1月 29 14:54 libhelloworld.a

lrwxrwxrwx 1 ufo ufo   19  1月 29 14:54 libhelloworld.la -> ../libhelloworld.la

-rw-r--r-- 1 ufo ufo  983  1月 29 14:54 libhelloworld.lai

lrwxrwxrwx 1 ufo ufo   22  1月 29 14:54 libhelloworld.so -> libhelloworld.so.0.0.0*

lrwxrwxrwx 1 ufo ufo   22  1月 29 14:54 libhelloworld.so.0 -> libhelloworld.so.0.0.0*

-rwxr-xr-x 1 ufo ufo 9038  1月 29 14:54 libhelloworld.so.0.0.0*

进入python的命令行模式进行C语言实现的两个数值相加的程序的调用;
ufo@ufo:~/helloworld/.libs$ python

Python 2.7.4 (default, Sep 26 2013, 03:20:56) 

[GCC 4.7.3] on linux2

Type "help", "copyright", "credits" or "license" for more information.

载入ctypes类(此类即是调用C语言动态库的方法)
>>> import ctypes

打开当前目录的动态库
>>> lib=ctypes.cdll.LoadLibrary("./libhelloworld.so.0.0.0")

调用动态库中的接口
>>> lib.add(5,7)

12

两个参数的相加的函数如下:
ufo@ufo:~/helloworld$ cat helloworld.c 

#include <stdio.h>

#include <stdlib.h>
int add(int a, int b)

{

    int c = a + b;

    return c;

}

编译动态库的命令行:
gcc -shared -fPIC -DPIC helloworld.c -o libhelloworld.so.0.0.0

Python 相关文章推荐
深入解读Python解析XML的几种方式
Feb 16 Python
Python算法之求n个节点不同二叉树个数
Oct 27 Python
Python 面试中 8 个必考问题
Nov 16 Python
利用python修改json文件的value方法
Dec 31 Python
python游戏开发之视频转彩色字符动画
Apr 26 Python
Python爬取视频(其实是一篇福利)过程解析
Aug 01 Python
python监控nginx端口和进程状态
Sep 06 Python
python 实现屏幕录制示例
Dec 23 Python
浅谈python量化 双均线策略(金叉死叉)
Jun 03 Python
keras输出预测值和真实值方式
Jun 27 Python
Pytorch 实现变量类型转换
May 17 Python
Python答题卡识别并给出分数的实现代码
Jun 22 Python
Python两个整数相除得到浮点数值的方法
Mar 18 #Python
10款最好的Web开发的 Python 框架
Mar 18 #Python
python通过yield实现数组全排列的方法
Mar 18 #Python
python以环状形式组合排列图片并输出的方法
Mar 17 #Python
python将ip地址转换成整数的方法
Mar 17 #Python
python实现模拟按键,自动翻页看u17漫画
Mar 17 #Python
python通过pil为png图片填充上背景颜色的方法
Mar 17 #Python
You might like
PHP获取文件绝对路径的代码(上一级目录)
2011/05/29 PHP
利用PHP扩展vld查看PHP opcode操作步骤
2013/03/04 PHP
php出现内存位置访问无效错误问题解决方法
2014/08/16 PHP
php禁止浏览器使用缓存页面的方法
2014/11/07 PHP
简单概括PHP的字符串中单引号与双引号的区别
2016/05/07 PHP
javascript函数库-集合框架
2007/04/27 Javascript
Prototype Class对象学习
2009/07/19 Javascript
jQuery1.6 使用方法一
2011/11/23 Javascript
JS图片预加载 JS实现图片预加载应用
2012/12/03 Javascript
js中parseFloat(参数1,参数2)定义和用法及注意事项
2013/01/27 Javascript
Angularjs 基础入门
2014/12/26 Javascript
js获取内联样式的方法
2015/01/27 Javascript
js实现键盘上下左右键选择文字并显示在文本框的方法
2015/05/07 Javascript
JavaScript中的toUTCString()方法使用详解
2015/06/12 Javascript
JavaScript实现的微信二维码图片生成器的示例
2016/10/26 Javascript
angular2中router路由跳转navigate的使用与刷新页面问题详解
2017/05/07 Javascript
node.js调用Chrome浏览器打开链接地址的方法
2017/05/17 Javascript
vue-cli项目如何使用vue-resource获取本地的json数据(模拟服务端返回数据)
2017/08/04 Javascript
一种angular的方法级的缓存注解(装饰器)
2018/03/13 Javascript
解决vue移动端适配问题
2018/12/12 Javascript
jquery分页优化操作实例分析
2019/08/23 jQuery
[02:09:59]火猫TV国士无双dota2 6.82版本详解(下)
2014/09/29 DOTA
在 Django/Flask 开发服务器上使用 HTTPS
2014/07/03 Python
python去除所有html标签的方法
2015/05/05 Python
python爬虫系列Selenium定向爬取虎扑篮球图片详解
2017/11/15 Python
python GUI库图形界面开发之PyQt5控件数据拖曳Drag与Drop详细使用方法与实例
2020/02/27 Python
css3实现背景动态渐变效果
2019/12/10 HTML / CSS
美国最大的珠宝首饰网上商城:Jewelry.com
2016/07/22 全球购物
草莓网英国官网:Strawberrynet UK
2017/02/12 全球购物
某公司.Net方向面试题
2014/04/24 面试题
表彰先进的通报
2014/01/31 职场文书
课堂教学改革实施方案
2014/03/17 职场文书
毕业寄语大全
2014/04/09 职场文书
大专生自荐书范文
2014/06/22 职场文书
领导班子奢靡之风查摆问题及整改措施
2014/09/27 职场文书
Python代码实现双链表
2022/05/25 Python