搜索
bottom↓
回复: 30

openwrt中运行Qt程序会出现Segmentation fault,有没有解决办法

[复制链接]

出0入90汤圆

发表于 2018-11-26 03:23:50 | 显示全部楼层 |阅读模式
最近玩widora的MT7628开发板。板子上面跑的openwrt,是个MIPS芯片。
按照网上的各种方法终于把Qt5.3.2交叉编译成功了。
然后在Qt上面交叉编译了一个简单的后台例子,只有一句话打印hello world.
放到板子上面运行,报错,提示需要libQt5Core.so.5。
然后把交叉编译的Qt库里面的libQt5Core.so.5.3.2放到/lib目录下面,之后建立了一个快捷方式libQt5Core.so.5。
之后再运行就不报这个错误了,报了Segmentation fault这个错误就终止了。
奇怪的是,我坚持继续执行程序2次,中间有segmentation fault,也有bus error。

但是最终,程序竟然就运行起来了,正常的打印了hello world。
这就太诡异了,为什么会出现这样的情况,难道是一开始某些内容在内存里面没有准备好,程序运行得太“仓促”,多运行几次最后就准备好了,然后就能每次正常执行。
直到板子重启后,就又会变回去。
不知道有没有人玩openwrt或者widora,在上面跑过Qt的给点提示。

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出90入4汤圆

发表于 2018-11-26 06:02:01 来自手机 | 显示全部楼层
很有可能内存溢出。只有中间加打印信息。一步一步查

出0入0汤圆

发表于 2018-11-26 08:39:00 来自手机 | 显示全部楼层
感觉像是so文件版本不对。或者就是你把debug版本和release版本搞错了

出0入442汤圆

发表于 2018-11-26 08:48:41 | 显示全部楼层
john78 发表于 2018-11-26 06:02
很有可能内存溢出。只有中间加打印信息。一步一步查

是的。qt自己就得用掉几百mb内存,而路由器撑死也只有128mb而已。

出0入0汤圆

发表于 2018-11-26 09:15:27 | 显示全部楼层
需要把整个Qt交叉编译后的库拷贝到板子上,有百来兆呢

出0入90汤圆

 楼主| 发表于 2018-11-26 09:43:11 | 显示全部楼层
wye11083 发表于 2018-11-26 08:48
是的。qt自己就得用掉几百mb内存,而路由器撑死也只有128mb而已。

是的,内存总共64M,系统已经用掉了30M了。
由于FLASH也只有32M,所以之前是把libqt5core.so放到sd卡里面的。
昨天把sd卡去掉。把库放到flash的/lib里面后,程序可以启动了,每次都能正常启动。
但是增加了一个serialport的so之后。又会出segment了。
现在看来,flash或者内存对Qt加载运行都有影响。
第一次在这么小内存,flash上面跑qt,没想到遇到这么奇怪的问题。
以前在很多平台跑都很正常。

另外问下,linux下不用Qt写应用,那就麻烦了。有没有一些比较好的方式去做。

出0入442汤圆

发表于 2018-11-26 09:54:07 来自手机 | 显示全部楼层
honami520 发表于 2018-11-26 09:43
是的,内存总共64M,系统已经用掉了30M了。
由于FLASH也只有32M,所以之前是把libqt5core.so放到sd卡里面 ...

干吗非得用qt,直接裸c++不得了。

出0入25汤圆

发表于 2018-11-26 09:55:46 | 显示全部楼层
openwrt一般资源都比较小,,Qt恐怕跑起来吃力

如果界面比较简单的话,不如在openwrt里跑个web server,,PC、手机浏览器里看界面

出0入90汤圆

 楼主| 发表于 2018-11-26 10:15:05 | 显示全部楼层
XIVN1987 发表于 2018-11-26 09:55
openwrt一般资源都比较小,,Qt恐怕跑起来吃力

如果界面比较简单的话,不如在openwrt里跑个web server,, ...

我的程序其实没有界面。
之前的程序是用Qt做的。用了串口,有一个http server。再就是用了Qt的一些内部特性,好比线程,还有信号于槽。
这个程序之前在全志A20上面运行的,现在换平台想移植到openwrt上面。结果发现被坑了。
这要是不能直接跑就麻烦了。重新用c,c++做,动作就大了。

出0入12汤圆

发表于 2018-11-26 10:24:45 | 显示全部楼层
本帖最后由 abutter 于 2018-11-26 10:40 编辑

可以用 strace 看看是怎么回事。

或者尝试一下 www.kdab.com/qt-quick-without-a-gpu-i-mx6-ull 去掉一些不必要的库。


如果 Qt 实在不行,golang 可以考虑一下。

出0入0汤圆

发表于 2018-11-26 10:35:50 | 显示全部楼层
本帖最后由 crazydtone 于 2018-11-26 10:37 编辑
honami520 发表于 2018-11-26 09:43
是的,内存总共64M,系统已经用掉了30M了。
由于FLASH也只有32M,所以之前是把libqt5core.so放到sd卡里面 ...


我用的Hi-link的HLK7688A模块,32MB FLash, 128MB ram,里面跑了基于goahead的webserver,杠杠的。
用C的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入90汤圆

 楼主| 发表于 2018-11-26 14:13:52 | 显示全部楼层
暂时没有特别好的办法,刚刚试着编译了一个Qt4.8.7,去掉了各种不需要的特性。这次出来的so文件尺寸小了许多。core.so库才2.8MB,晚上实验下看看能不能跑起来。
如果能跑起来就方便了。
否则的话就要对代码动大手术了。

出0入0汤圆

发表于 2018-11-26 14:33:12 | 显示全部楼层
没有界面还是想办法别用Qt了吧,Qt还是比较耗费资源的。

出0入0汤圆

发表于 2018-11-26 21:54:51 来自手机 | 显示全部楼层
honami520 发表于 2018-11-26 14:13
暂时没有特别好的办法,刚刚试着编译了一个Qt4.8.7,去掉了各种不需要的特性。这次出来的so文件尺寸小了许 ...

路由器资源太少了

出60入0汤圆

发表于 2018-11-26 22:50:41 | 显示全部楼层
Qt一般用的是glibc, MT7628用的是uclibc? 好像没有MMU

出0入0汤圆

发表于 2018-11-27 02:44:31 来自手机 | 显示全部楼层
honami520 发表于 2018-11-26 14:13
暂时没有特别好的办法,刚刚试着编译了一个Qt4.8.7,去掉了各种不需要的特性。这次出来的so文件尺寸小了许 ...

你要是做产品的话,这个配置跑QT悬

出0入0汤圆

发表于 2018-11-27 02:51:19 来自手机 | 显示全部楼层
Qt Lite 试试

出0入90汤圆

 楼主| 发表于 2018-11-27 09:34:14 | 显示全部楼层

4.8.7的还是要比5小很多。估计就算上QT LITE,也还是比4大。算了,我就这么用了,反正其实我也不用它的GUI,只是之前的程序是基于Qt的。
现在改起来就方便些。

出0入12汤圆

发表于 2018-11-27 09:58:00 | 显示全部楼层

Qt Lite 有资料码?搜索了一下,似乎不太多。

出0入12汤圆

发表于 2018-11-27 10:03:42 | 显示全部楼层
abutter 发表于 2018-11-27 09:58
Qt Lite 有资料码?搜索了一下,似乎不太多。

似乎只是 feature 删减,整理的更模块化了。
不好意思。

出10入46汤圆

发表于 2018-11-29 08:50:47 | 显示全部楼层
openwrt 本身是无界面系统,小系统专用,功耗模式专用。 上Qt 是不合适的。 另不知道你的平台是啥? 7161 ?? 如果是的话,就不要浪费你的生命了。
用简单的C++ 重写,都比你移植快!

出0入90汤圆

 楼主| 发表于 2018-11-29 10:23:45 | 显示全部楼层
gonboy 发表于 2018-11-29 08:50
openwrt 本身是无界面系统,小系统专用,功耗模式专用。 上Qt 是不合适的。 另不知道你的平台是啥? 7161 ?? ...

嗯,用的7628,widora BIT5平台。qt4.8.7已经OK了。现在正在慢慢的移植中。程序太大了,前面的程序写了2年多,随意的重写影响太大了。

出10入46汤圆

发表于 2018-11-30 08:46:38 | 显示全部楼层
honami520 发表于 2018-11-29 10:23
嗯,用的7628,widora BIT5平台。qt4.8.7已经OK了。现在正在慢慢的移植中。程序太大了,前面的程序写了2 ...

BIT5金手指:MT7628DAN   FLASH 16/32MB   RAM:64MB

如果没改RAM的话。  只能说是自己找麻烦。 就算你加上了swap, 又能提高多少。

RAM >=512M 才有可玩性

出0入0汤圆

发表于 2018-11-30 09:41:30 来自手机 | 显示全部楼层
各位大佬,openwart跑Java是否可行

出0入0汤圆

发表于 2018-11-30 15:19:08 | 显示全部楼层
其实可以先不讨论7628上QT合理性的问题。
核心放在重点上,为什么多个so会有segment fault,楼主不加载serial的时候内存占用多大,加载了会后还有多少内存,是不是malloc申请不到了或者栈空间太小了

出0入33汤圆

发表于 2018-11-30 15:27:57 来自手机 | 显示全部楼层
就是放在外置存储上的原因,你拷贝到内置存储或者/tmp就可以了。

出0入90汤圆

 楼主| 发表于 2018-11-30 15:52:41 | 显示全部楼层
vtte 发表于 2018-11-30 15:27
就是放在外置存储上的原因,你拷贝到内置存储或者/tmp就可以了。

我后来换到内置上面就好了。
但是这就奇了怪了。SD卡理论上速度比W25XXX速度更快啊。SO加载到内存里面。
为什么会出现问题。SO加载是怎么样的呢?
内存的话都是8-9MB吧。好像有一些被catch了

出0入0汤圆

发表于 2018-12-1 15:52:34 | 显示全部楼层
honami520 发表于 2018-11-30 15:52
我后来换到内置上面就好了。
但是这就奇了怪了。SD卡理论上速度比W25XXX速度更快啊。SO加载到内存里面。
...

可以试试静态编译。

出0入0汤圆

发表于 2018-12-1 23:26:46 来自手机 | 显示全部楼层
V3s荔枝派ddr容量差不多,我qt写界面跑20fps的vga动画也没事,还是检查qt本身的问题吧

出0入33汤圆

发表于 2018-12-2 20:20:17 来自手机 | 显示全部楼层
honami520 发表于 2018-11-30 15:52
我后来换到内置上面就好了。
但是这就奇了怪了。SD卡理论上速度比W25XXX速度更快啊。SO加载到内存里面。
...

不是速度的原因,我以前遇到过,但最终也没有找到原因。

出0入36汤圆

发表于 2021-11-22 19:30:15 | 显示全部楼层
crazydtone 发表于 2018-11-26 10:35
我用的Hi-link的HLK7688A模块,32MB FLash, 128MB ram,里面跑了基于goahead的webserver,杠杠的。
用C ...

golang的程序要在mt7688上跑,编译配置要设置成mips架构吧?还有大小端也要设置吧?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 18:05

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表