使用QWT-6.1.2写了一个名为dataplot的小程序,Ubuntu下运行正常,遂交叉编译后传到开发板上,运行,报错:Segmentation fault。
主机环境:Ubuntu 12.04 + gcc 4.6.3 + Qt 4.8.1
开发环境:arm-linux-gcc 4.4.3 with EABI + QtE 4.6.3 (均为mini2440官方提供)
网上查阅一堆资料,各种重新编译Qt库、换交叉编译器等等,实在有些繁琐,也不能保证符合我的情况,因为前几天交叉编译的几个小程序是可以运行的,应该不是qt库和qwt库的问题。
为了简化问题,直接修改dataplot代码,只留下一个显示提示信息的label标签,不能再简单了。然后交叉编译,传到开发板上,仍然Segmentation fault,奇怪!开发板更复杂的Qt程序都运行过,为什么今天不行了呢?
应该不是程序问题,为了进一步缩小范围,将前几天编译并可以在2440上成功运行的qwt_test程序重新交叉编译一下,传到开发板,依然Segmentation fault,简直不科学。
虽然很奇葩,但是却也验证了不是代码问题,也不是库或编译器的问题。
想到这次与前些天调试程序的唯一区别就是使用的FTP传输软件不同。博主一直使用FTP方式将程序传输到开发板上,之前一直是在windows下通过FlashFXP将Qt程序传入开发板的,今天为了省事,直接在Ubuntu下使用FileZilla将程序传入开发板。
试一试,打开VMware的共享,在Ubuntu中将dataplot程序直接复制到/mnt/hgfs/ubuntu share目录(这个目录实际上是Win7宿主机E:/Ubuntu Share目录,分区格式为NTFS)下,然后在Windows下打开FlashFXP,将Ubuntu Share目录下的dataplot程序传入开发板,传入的时候FlashFXP会提示出现同名但不同大小的新文件(难道问题就在这里?)覆盖,确认覆盖即可。在开发板上执行dataplot程序,成功运行!
问题虽然解决,但原因博主尚不知道,如果有哪位高人了解还请告知。
作为参考,博主Ubuntu下的FileZilla版本是直接apt-get的3.5.3版本,Windows下的FlashFXP是5.0.0版本
================================================================================
下面总结一些网络上解决Qt程序Segmentation fault的方法,以备不时之需
很多朋友在移植Qt-embedded 4.xx的时候都使用了友善之臂公司提供的交叉编译器,
虽然Qt与Qt应用程序都编译成功,但运行Qt应用程序时却经常会出现段错误(Segmentation Fault),
可以尝试使用openmoko(一个开源手机项目)提供的编译器,同样是EABI,版本为4.1.2
http://www.qtopia.net/modules/mydownloads/singlefile.php?lid=38
经测试,运行Qt应用程序时不会出现段错误(Segmentation Fault)。
”应该是QWS_SIZE设置的问题,我有一个程序QWS_SIZE=320x240的时候可以运行,然后设置为QWS_SIZE=320x480就报段错误了“
“中文字体问题,运行程序使用./myQtApp -qws -fn SIMHEI”
程序 qt-embedded-linux-opensource-src-4.5.0/src/gui/embedded/qscreenlinuxfb_qws.cpp
作如下修改:
410行: /* //EmbedSky_del start 20091208 canaccel = useOffscreen(); if(canaccel) setupOffScreen(); */ //EmbedSky_del end 20091208 canaccel = false; 706行: /* //EmbedSky_del start 20091208 if (canaccel) { *entryp=0; *lowest = mapsize; insert_entry(*entryp, *lowest, *lowest); // dummy entry to mark start } */ //EmbedSky_del end 20091208 canaccel = false
可能解决segmentation fault问题,请大家测试
修改了qscreenlinuxfb_qws.h,用友善之臂提供的arm-linux-gcc-4.3.2.tgz重新编译QT4.5.0-arm(release方式),试了2个程序可以正常运行。
NOTE: This is a HACK, and not a pretty one either. It makes sure that it hardcoded doesn't use off-chip graphic memory. I don't use off-chip graphic memory, but if you do, this hack is useless.
Qt-embedded 4.xx 运行出现 Segmentation Fault 段错误的解决办法
运行 qt/embedded 4.4.2 出现 segmentation fault
Qt: Segmentation fault问题怎么解决