使用c能够正常调用该so文件,使用python调用报错: undefined symbol: _Z16DetectStruts2052jiPcS_iRi
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率

linux下python调用so文件库,报错
收起
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
微信扫一扫
点击复制链接分享
- 邀请回答
- 编辑 收藏 删除 结题
- 收藏 举报
当前问题酬金
¥ 0 (可追加 ¥500)
支付方式
扫码支付
18条回答 默认 最新
- 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
502203305 2020-11-30 16:25关注你后面的那个案例可以在编译的时候以 ./test_a.so 的方式编译,就不会出错。即 gcc -g -o main.so main.c ./test_a.so -shared -fPIC
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
评论按下Enter换行,Ctrl+Enter发表内容
- 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
502203305 2020-11-30 14:18关注先看看有没有这个符号。这种符号名,一看就不是extern "C"修饰的符号。
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
评论按下Enter换行,Ctrl+Enter发表内容 - 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
失伟 2020-11-30 14:32关注就是大概so文件里有个主函数main,主函数用 extern "C" { main(){} }修饰了,mian里调用的其他函数也要用 extern "C"修饰么
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
评论按下Enter换行,Ctrl+Enter发表内容 - 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
502203305 2020-11-30 14:53关注你在python里面调用的函数都需要放在extern "c"里面。其他的就不用。
你这个是在库加载的时候就失败,建议使用`ldd xxx.so`查看一下依赖的库是否完整。
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
评论按下Enter换行,Ctrl+Enter发表内容 - 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
失伟 2020-11-30 15:03关注依赖的库都是完整的,python调用的函数在 extern "c",可是还没到调用那一步,只是在cdll.LoadLibrary()加载的时候就报错了
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
评论按下Enter换行,Ctrl+Enter发表内容 - 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
502203305 2020-11-30 15:08关注那就很有可能是你的so确实没有定义这个符号,加个`main`函数编译成可执行文件看看是否真的完整。
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
评论按下Enter换行,Ctrl+Enter发表内容 - 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
失伟 2020-11-30 15:12关注这个so文件是我们领导编译完给我的,😂,最主要是我用c调用了,竟然好使,python调用报错,那就是python的ctypes的问题,难受😭
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
评论按下Enter换行,Ctrl+Enter发表内容 - 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
502203305 2020-11-30 15:22关注C下用LAZY模式打开可能没有问题。你用NOW模式打开试试。
也可以使用指令 nm xxx.so | grep DetectStructs 查看结果,如果是 U 说明这个符号没有定义。
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
评论按下Enter换行,Ctrl+Enter发表内容 - 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
失伟 2020-11-30 15:25关注直接没有反应😂
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
评论按下Enter换行,Ctrl+Enter发表内容 - 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
502203305 2020-11-30 15:33关注你用NOW模式打开,判断返回值,并调用对应函数都没有问题?
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
评论按下Enter换行,Ctrl+Enter发表内容 - 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
失伟 2020-11-30 15:37关注我不知道now模式是啥😥,不过这是我用c写的调用so文件的脚本,然后运行就有结果
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
评论按下Enter换行,Ctrl+Enter发表内容 - 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
502203305 2020-11-30 15:48关注RTLD_LAZY改为RTLD_NOW.
然后判断handle的返回值是否成功。
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
评论按下Enter换行,Ctrl+Enter发表内容 - 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
失伟 2020-11-30 16:02关注改成RTLD_NOW显示段错误
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
评论按下Enter换行,Ctrl+Enter发表内容 - 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
502203305 2020-11-30 16:05关注你输出一下handle的值是多少。很可能是NULL,如果是的话就说明你领导传给你的so有问题。
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
评论按下Enter换行,Ctrl+Enter发表内容 - 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
失伟 2020-11-30 16:13关注是Null,是什么问题呢,另外我自己也做了个测试,就是新建一个,test_a.c文件,编译成test_a.so文件,然后在写一个mian.c文件,然后main直接能调用test_a.so文件,运行有结果,然后把main编译成main.so文件,再用python调用main.so也报同样的错误,
而test_a就是我test_a文件里的函数名
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
评论按下Enter换行,Ctrl+Enter发表内容 - 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
502203305 2020-11-30 16:23关注先检查你的库依赖是否完整。不完整就会出现加载失败。返回错误
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
评论按下Enter换行,Ctrl+Enter发表内容 - 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
失伟 2020-11-30 17:12关注感谢大哥,好像是这个问题,按照你的方式改了,没报错,
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
评论按下Enter换行,Ctrl+Enter发表内容 - 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
失伟 2020-11-30 17:13关注感谢大哥,能加个联系方式么
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
评论按下Enter换行,Ctrl+Enter发表内容
报告相同问题?
- 2020-11-30 13:28回答 9 已采纳 你后面的那个案例可以在编译的时候以 ./test_a.so 的方式编译,就不会出错。即 gcc -g -o main.so main.c ./test_a.so -shared -fPIC
- 2021-05-20 20:50回答 2 已采纳 libatptradeapi. so: cannot open shared object file :no such file or directory是没有这个文件,你检查下你的文件路径对不对。
- 2022-08-11 20:23回答 4 已采纳 感谢各位,已经解决了,在隔壁帖子找到了解决方法https://blog.csdn.net/national_/article/details/121594916
- 2021-11-04 14:35luckwsm的博客 使用C++实现某些算法功能后,供python调用时出错: AttributeError: /..../libHessian4Nii.so: undefined symbol: callVesselSegNii 通过度娘得知是因为c++编译后的文件会把函数名重命名(这是便于实现重载功能...
- 2021-05-15 22:19回答 1 已采纳 应该时找不带你的DLL依赖的C++库。
- 2022-08-24 17:17回答 1 已采纳 问题已经解决,主要是从github下载回来的code不能正常运行,需要使用pip install amammdf后再使用函数调用。我个人理解的原因是Pycharm默认从项目的文件夹来调用,所以报错。而
- 2022-05-17 17:47回答 5 已采纳 上网查了,最近好像jsdelivr崩掉了,所有获取不了资源。无解。等修复吧。
- 2022-11-20 15:23比赛学习者的博客 使用Python调用C++的so动态链接库记录。在linux环境中
- 2022-08-25 00:55回答 4 已采纳 直接在命令行输入你的python安装路径,看能不能进入python;如果不能也可以试试以下命令: whereis python which python
- 2022-03-24 12:59回答 1 已采纳 在使用Python调用C++函数时,需要注意Python程序运行时使用的空间与C/C++程序使用的空间互相保持一定的独立性,就是说,没有重叠的部分,因为两种程序各自回收开辟、使用的空间。在我使用Cty
- 2022-04-23 23:22回答 1 已采纳 用一下第三方包
- 2022-01-13 14:33wangxinRS的博客 用python调用动态链接库,编译完全没有问题,顺利生成.so文件,但是运行python调用该库时,发生报错。 报错信息如下: Traceback (most recent call last): File "py_send.py", line 14, in <module> ...
- 2022-02-16 10:13回答 1 已采纳 so 文件不是 linux 的吗?so文件是Linux下的程序函数库,即编译好的可以供其他程序使用的代码和数据。你如果在windows 下用, 应该用win下的cl 和link ,,编译成dll参考一
- 2020-09-28 19:26Python热爱者的博客 1、通过C语言编写一个简单max函数,生成一个max.so链接库 /* * # -shared 为链接库 让编译器知道是要编译一个共享库 * # -fPIC(Position Independent Code) 编译生成代码与位置无关 */ int max(int a,int b) { ...
- 2020-12-08 12:53weixin_39850920的博客 python调用.soLINUX下C++生成.so文件及编译生成可执行文件的过程[linux][原创]C++ so库的编译python调用python 打包成 so | python 调用cpp | python 调用C++简单例子C++转so文件这里以简单的加法为例,代码如下,...
- 没有解决我的问题, 去提问
悬赏问题
- ¥15 二分类改为多分类问题
- ¥15 Unity微信小游戏上调用ReadPixels()方法报错
- ¥15 如何通过求后验分布求得样本中属于两种物种其中一种的概率?
- ¥15 q从常量变成sin函数,怎么改写python代码?
- ¥15 图论编程问题,有可以指导的吗
- ¥15 DEA的CCR模型画图
- ¥15 请假各位一个关于安卓车机的问题
- ¥15 光谱仪怎么看这样的透射谱
- ¥15 pyqt5 如何实现输入框输入关键词,下拉框显示模糊查询返回的结果?
- ¥20 fluent模拟,可以燃烧和相变同时模拟吗?