Python 调用 C 库的实现

在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中这样直接引用,目前引用的方法笔者尚未研究出来。
相关文章
相关标签/搜索