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之用Python计算
Sep 12 Python
给Python入门者的一些编程建议
Jun 15 Python
Python作用域用法实例详解
Mar 15 Python
Python列表删除的三种方法代码分享
Oct 31 Python
python+matplotlib绘制简单的海豚(顶点和节点的操作)
Jan 02 Python
微信跳一跳游戏python脚本
Apr 01 Python
python3的输入方式及多组输入方法
Oct 17 Python
python: 自动安装缺失库文件的方法
Oct 22 Python
Python+opencv 实现图片文字的分割的方法示例
Jul 04 Python
用Python画一个LinkinPark的logo代码实例
Sep 10 Python
Python搭建Keras CNN模型破解网站验证码的实现
Apr 07 Python
详解pyqt5的UI中嵌入matplotlib图形并实时刷新(挖坑和填坑)
Aug 07 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分页思路以及在ZF中的使用
2012/05/30 PHP
mysql,mysqli,PDO的各自不同介绍
2012/09/19 PHP
ajax取消挂起请求的处理方法
2013/03/18 PHP
php stream_get_meta_data返回值
2013/09/29 PHP
PHP中nowdoc和heredoc使用需要注意的一点
2014/03/21 PHP
php生成Android客户端扫描可登录的二维码
2016/05/13 PHP
Windows 系统下安装和部署Egret的开发环境
2014/07/31 Javascript
详解JavaScript中的异常处理方法
2015/06/16 Javascript
javascript实现拖放效果
2015/12/16 Javascript
浅谈Jquery中Ajax异步请求中的async参数的作用
2016/06/06 Javascript
jQuery插件实现文件上传功能(支持拖拽)
2020/08/27 Javascript
js选择器全面解析
2016/06/27 Javascript
javascript中异常处理案例(推荐)
2016/10/03 Javascript
Ionic2系列之使用DeepLinker实现指定页面URL
2016/11/21 Javascript
jqgrid实现简单的单行编辑功能
2017/09/30 Javascript
jQuery基于闭包实现的显示与隐藏div功能示例
2018/06/09 jQuery
JS使用队列对数组排列,基数排序算法示例
2019/03/02 Javascript
JS JQuery获取data-*属性值方法解析
2020/09/01 jQuery
天翼开放平台免费短信验证码接口使用实例
2013/12/18 Python
python自动化测试之setUp与tearDown实例
2014/09/28 Python
Python callable()函数用法实例分析
2018/03/17 Python
2019 Python最新面试题及答案16道题
2019/04/11 Python
关于Python中的向量相加和numpy中的向量相加效率对比
2019/08/26 Python
在Python中通过threshold创建mask方式
2020/02/19 Python
python安装后的目录在哪里
2020/06/21 Python
俄罗斯有趣和原创礼物网上商店:MagicMag
2019/08/01 全球购物
PHP中如何使用Cookie
2015/10/28 面试题
两只小狮子教学反思
2014/02/05 职场文书
优秀求职信
2014/05/29 职场文书
副总经理任命书
2014/06/05 职场文书
费城故事观后感
2015/06/10 职场文书
文艺部部长竞选稿
2015/11/21 职场文书
javascript拖曳互换div的位置实现示例
2021/06/28 Javascript
浅谈Redis的keys命令到底有多慢
2021/10/05 Redis
mysql如何查询连续记录
2022/05/11 MySQL
华为HarmonyOS3.0强在哪? 看看鸿蒙3.0这7个小功能
2023/01/09 数码科技