设为首页 加入收藏

TOP

Python调用C库的实现
2014-11-24 08:22:39 来源: 作者: 【 】 浏览:1
Tags:Python 调用 实现

在linux开发的动态链接库需要被python调用,首先需要生成.so文件。


生成动态链接库的方法网上有很多,这里就不用多说,主要就是首先根据源文件编译生成.o,然后链接这些.o文件-shared生成.so。需要注意的是,在编译链接生成动态库的时候一定要加-fPIC参数。而且如果在链接时需要链接其他库的话,必须保证其他库编译时也是加了-fPIC参数。这里笔者就是调用了mysql数据库libmysqlclient.a静态库,但是这个库没有加-fPIC编译,所以生成动态库的时候一直报错,说是需要加-fPIC重新编译。最后从网上下载了libmysqlclient的源码,然后加上-fPIC参数重新编译生成.a,问题才解决。


需要注意的是,libmysqlclient是使用cmake,该编译参数需要在CMakeList.txt文件里面修改编译参数加入-fPIC即可。


生成.so文件一定要将引用的其他库引用一起链接,如果不一起链接的话,在python调用的时候会报未定义错误。


生成动态链接库以后就可以在python里面调用了。


调用动态库可以使用ctypes和boost。


本次笔者使用ctypes调用.so动态库函数。


调用的方法:


1.在python中引入ctypes:


import ctypes


2.加载动态库


lib_handle = ctypes.CDLL('./xxx.so')


3.关联动态库中的函数


func = lib_handle.func


4.使用函数


func(par1,par2)


需要注意的是,在动态库中定义的全局变量不能在python中这样直接引用,目前引用的方法笔者还没有研究出来。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇sqlite3在Linux下的编程 下一篇POSIX(Portable Operating Syste..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Python 数据分析与可 (2025-12-26 21:51:20)
·从零开始学Python之 (2025-12-26 21:51:17)
·超长干货:Python实 (2025-12-26 21:51:14)
·为什么 Java 社区至 (2025-12-26 21:19:10)
·Java多线程阻塞队列 (2025-12-26 21:19:07)