python调用so库

python调用so库 

https://blog.csdn.net/frankie110/article/details/8724509

我厂大部分的code都是采用C++写的,有的时候需要进行一些数据分析,又需要用c++里面的很多函数,例如url的转换函数,hash编码的函数,着实不甚方便,这个时候把常用的c++的函数,封装为SO库让python调度就非常有必要的了。

  当然,如果从性能的考虑,你也可以balabal了。

  那么这里就简单描述一下在python中怎么使用so库吧。

  python中使用so库的方法很多,以下三个网页都比较好的描述了怎么操作。

http://www.isnowfy.com/introduction-to-python-c-extension/  简介了各种调用so的方法。

http://starship.python.net/crew/theller/ctypes/tutorial.html   介绍了python与so库之间的各个映射关系。

http://ciniao.me/article.php?id=22  将了python如何调用c语言的分词块。

当需要采用调用c++的程序的时候,需要对原有的数据加一个extern "C"封装一下即可。

采用g++编译的代码也需要的,原因可能是因为c++编译器编译后的二进制so文件中,对c++的函数进行了重新的命名导致的。

extern "C" {
    Foo* Foo_new(){ return new Foo(); }
    void Foo_bar(Foo* foo){ foo->bar(); }
}
以下两个网页又更详细的介绍
http://blog.waterlin.org/articles/using-python-ctypes-to-link-cpp-library.html

http://stackoverflow.com/questions/145270/calling-c-c-from-python

最后需要补充的一个问题是:当我调用so文件的时候,会发生一个有趣的现象:

我把python放到streaming找运行的时候,发现streaming始终查找不到so,但是数据却是被上传到hadoop的对应的work目录下。

后来定位到原因:

是python加载动态库方面是默认从系统lib库上查找库文件。
我的目录在当前目录下,所以需要从libdy.so变为./libdy.so

同时奇怪的是,在本地有ok。不解~ 

相对以前用java来调用so,感觉python更朴实一下哈。
 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值