网站首页 > 文章中心 > 其它

pythonso函数名

作者:小编 更新时间:2023-08-08 12:52:17 浏览量:142人看过

python 怎么调用so文件

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

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

extern "C" {

pythonso函数名-图1

Foo* Foo_new(){ return new Foo(); }

void Foo_bar(Foo* foo){ foo-bar(); }

}

以下两个网页又更详细的介绍

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

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

后来定位到原因:

pythonso函数名-图2

是python加载动态库方面是默认从系统lib库上查找库文件.

我的目录在当前目录下,所以需要从libdy.so变为./libdy.so

Python 调用 so

先来一个网上随便都能找得到的例子吧:先来一个test.c

在来一个test.h:

然后将其编译成.so文件:

最后在python文件里面调用:

然后在终端运行:

当然了,ctypes不是这样简单的模块,否则也不会放到标准库里面去

(未完待续...)

使用gdb查看python段错误(Segmentation fault)

公司有个业务是使用python脚本调用.so文件,但是有时候so文件内部发生错误,python就直接崩溃了,无任何提示信息,所以很不方便找错误原因.

使用 gdb 可以看到更详细的一些信息,其使用方式如下:

ulimit -c 是查看创建的核心转储的最大大小,这里为0,是需要修改的,可以将其改成不限制大小的 unlimited .

cat /proc/sys/kernel/core_pattern 这一步我的理解是查看到时候生成的缓存文件存储名称,这里为 core ,表示其会在当前目录下生成一个名为core的缓存文件,但是为了使其更加通用,可以修改一下其路径和名称格式.

若执行的时候没有 gdb ,可以执行 apt-get install gdb 安装.

python可以调用.so或.a库吗

应该可以的.

关键是你要确定.a或.so是用C或C++编写的.

还有就是你要清楚地知道调用方法的接口.

用这下面的方式来调用

import ctypes

c = ctypes.cdll.LoadLibrary('xxx.so')

c.xxx(para)

以上就是土嘎嘎小编为大家整理的pythonso函数名相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章