Qte程序执行到app.exec()时出现Segmentation Fault问题的解决

戏子无情 提交于 2019-12-07 15:10:25

昨天把Qtopia 2.2.0编译移植好了后,今天打算写一个hello world测试一下。拿到可执行文件后,下到板子上,加上-qws选项运行,结果直接Segmentation Fault。代码如下:

#include "qapplication.h"
#include "qpushbutton.h"
#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
        QApplication app(argc,argv);

        QPushButton *hello = new QPushButton("Hello World.",0);
        //printf("hello.\n");
        hello->resize(640,480);
        //hello->move(100,100);
        //printf("hello.move.\n");

        hello->show();

        app.setMainWidget(hello);
        //printf("hello.show.\n");

        while(0)
        {
                printf("show...\n");
                sleep(1);
        }

        return app.exec();
}

检查代码,没问题,每一句后面加上printf语句,发现前面都没有问题,但只要执行到

return app.exec();

就会出现段错误。我在前面加上while(1)都没问题。上网google了一下,也有人遇到这问题,不过说法各不一样,主要都是说是编译器版本的问题,而我的环境不会有这个问题。在最后终于找到了原因:是编译选项需要加上宏QWS。出错前的编译命令为:

arm-hismall-linux-g++ -ohello hello.cpp -I$(HOME)/qt/qt-hisi-2.2.0/qtopia-free-2.2.0/qt2/include -I$(HOME)/qt/qt-hisi-2.2.0/qtopia-free-2.2.0/qt2/src/tools -lqte -L$(HOME)/qt/qt-hisi-2.2.0/qtopia-free-2.2.0/qtopia/lib -Wl,-rpath-link=/home/lzhong/qt/qt-hisi-2.2.0/build/lib
结果编译链接都没有错误,但是一到板子上就是段错误。但加上-DQWS选项后就好了。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!