您尚未登录。

楼主 # 2025-03-11 18:47:44

coollofty
会员
注册时间: 2025-02-07
已发帖子: 10
积分: 110

求助,又碰上问题了:obj_linkLibrary之后再obj_run则无法使用之前已定义的函数

obj_linkLibrary了一个.a文件,比如这里面定义了一个createWidget函数
过几帧后再用obj_run函数运行一段代码,代码中调用这个createWidget,函数是存在的,但是只要一调用就会报异常:

Assertion "strGetSize(method_dec) <= size" failed, in function: methodArg_getTypeList().
  (at E:\projects\aipeiban\lv_binding_pikascript\LVGL.Simulator\pikascript\pikascript-core\PikaObj.c:1062)

而如果直接在这个.a库的代码里调用这个函数又没问题,这是为啥呢?

我肯定是需要在多处多次运行不同的代码的,而这个.a文件里的代码可以理解为就是我为我的工程写的全局库,各种python写的工具函数。这个问题不会无解吧?

离线

#1 2025-03-12 10:22:02

lyon1998
Moderator
注册时间: 2021-12-01
已发帖子: 134
积分: 155

Re: 求助,又碰上问题了:obj_linkLibrary之后再obj_run则无法使用之前已定义的函数

估计是线程安全的问题,我不确定你是不是.a的文件里面已经在运行一个python循环了,这样的时候,你再调用obj_run (如果是在另一个线程),这样会导致冲突,我建议你还是用 _thread 模块,因为 _thread 模块里面对这种情况做了加锁。

如果你不用 _thread 模块,那需要去参考 _thread 模块的加锁方式手动加锁。

离线

楼主 #2 2025-03-12 18:08:11

coollofty
会员
注册时间: 2025-02-07
已发帖子: 10
积分: 110

Re: 求助,又碰上问题了:obj_linkLibrary之后再obj_run则无法使用之前已定义的函数

没有线程安全问题,虽然有多线程,但是所有代码包括lvgl渲染都跑在主线程里,线程用来运行播放器、网络curl请求这些,如果有通知或异步调用,也都是用Message的方式Post到主线程去调用的。脚本只在主线程,所以,线程安全问题肯定是不存在的。


今天发现我在这个.a里面定义了一个变量,在另外一次obj_run的代码里去访问这个变量里的值是可以的,但是调用函数就会报上面那个错误,不管调用这个.a里的哪个函数,都是这个样子

这个问题还有什么可能?

最近编辑记录 coollofty (2025-03-12 18:11:05)

离线

#3 2025-03-13 20:00:56

lyon1998
Moderator
注册时间: 2021-12-01
已发帖子: 134
积分: 155

Re: 求助,又碰上问题了:obj_linkLibrary之后再obj_run则无法使用之前已定义的函数

那有可能是栈溢出了,上面这个信息就是属于内核未知原因崩溃了

你只是获取一个变量的话,那使用的内存是很少的,但是 obj_run 要走整个字节码编译流程,占用的 heap 偏多,可能就溢出了

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn