• 4412开发板编译ARMqtopiafreesrc2.2.0常见错误的处理


    关于一些编译错误的处理

    编译过程中如果产生错误信息,需要解决掉才能继续编译下去,错误信息的产生主要是因为编译器版本造成的,共有以下几类错误信息:

    1 缺少工具错误

     

    这是编译时遇到的第一个问题,编译 qt2 时需要使用 uic 工具,uic 是 PC 上运行的工具,

    用来把 Qt 的界面文件,也就是.ui 文件转换成.h 文件和.cpp 文件,转换完成后才能交

    给交叉编译器编译。

    解 决 办 法 :把 qtopia-free-2.2.0/dqt/bin 里 面 的 uic 文 件 拷 贝 到

    qtopia-free-2.2.0/qt2/bin 下面即可。

    注意:uic 拷贝到 qtopia-free-2.2.0/qt2/bin 后,需要修改一下 build 脚本文件,因为

    如果您重新执行 build 命令,该脚本会把刚才编译中的 qtopia-free-2.2.0 文件夹删除,重新

    解压,形成新的 qtopia-free-2.2.0,开始编译,这样刚才拷贝的 uic 就没意义了。

    修改方法如下图所示:

     

    就是在 rm –fr qtopia-free-2.2.0 和 tar xfvz qtopia-free-src-2.2.0.tar.gz 语句前加上

    #注释掉,修改后保存退出。

    然后执行#./build,重新编译。

    2 缺少类声明

    error: ‘QWSInputMethod’ has not been declared

    修改方法如下:

    #cd /root/yizhi/qtopia-free-2.2.0/qt2/src/kernel

    # gedit qwindowsystem_qws.h

    在前面增加以下两行:

    class QWSInputMethod;

    class QWSGestureMethod;

    保存退出,继续编译。

    3 缺少文件错误

     

    源代码需要 custom-linux-arm-g++.h/cpp 文件,但是没找到。

    解决办法:

    #cd ./qtopia-free-2.2.0/qtopia/src/libraries/qtopia

    #cp custom-linux-ipaq-g++.h custom-linux-arm-g++.h

    #cp custom-linux-ipaq-g++.cpp custom-linux-arm-g++.cpp

    继续编译

    #cd /root/yizhi

    #./build

    4 无法匹配到 QSizePolicy 类的构造函数

    即 QSizePolicy 类没有提供特定参数的构造函数

     

    解决办法:

    查看出错信息的文件,这里是 passwordbase_p.cpp,且出错的地方是第 35 行,使用

    find 命令找到该文件在 Ubuntu 中的具体位置:

    #find ./ -name passwordbase_p.cpp

     

    找 到 后 在./qtopia-free-2.2.0/qtopia/src/libraries/qtopia/.ui/release-shared 目

    录下面,执行以下命令,修改该文件:

    # gedit ./qtopia-free-2.2.0/qtopia/src/libraries/qtopia/.ui/release-shared/pas

    swordbase_p.cpp

    移动光标到第 35 行,如下图所示:

     

    prompt->setSizePolicy(QsizePolicy((QsizePolicy::SizeType)7,

    (QsizePolicy::SizeType) 7,0,0,prompt->sizePolicy().hasHeightForWidth()))

    函数中的 0,0 去掉,即:

    prompt->setSizePolicy(QsizePolicy((QsizePolicy::SizeType)7,

    (QsizePolicy::SizeType) 7,prompt->sizePolicy().hasHeightForWidth()))

    去掉后如下图:

     

    保存退出,执行如下命令重新编译:

    #./build

    重新编译后,会出现若干次这个类型的错误,解决办法非常相似,这里就不一一介绍了。

    5 类的成员函数前有额外的类名字

    如下图:

     

    解决办法:

    根据错误提示信息找到 qdawg.cpp 文件,gedit 打开该文件,移动光标到 294 行。

     

    修改后如下图:

     

    保存退出,继续编译

    #./build

    6. open 函数调用缺少必要的参数

    如下图提示的错误:

     

    解决办法参考下图:

     

    打开 qmemoryfile_unix.cpp 文件,修改第 51 行

     

    f=::open(tempFile,latin1(),0_CREAT | 0_WRONLY); 修改为

    f=::open(tempFile,latin1(),0_CREAT | 0_WRONLY,0666);即增加 0666 参数,

    保存,退出。

    对于 open 函数来说,仅当创建新文件时,第三个参数使用,用于指定文件的访问权限

    注 意:共 有 两 处 这 样 的 修 改, 另 外 一 处:

    qtopia-free-2.2.0\qt2\src\tools\qmemoryfile_unix.cpp 文件的第 143 行位置,修改

    方 法与 qmemoryfile_unix.cpp 文件相似。

    #./build 重新编译

    7 缺少 this 指针

    如下图:

     

    解决办法:执行下面的命令

    # gedit ./qtopia-free-2.2.0/qt2/include/qvaluestack.h

    移动光标到 57 行

    将 remove( this->fromLast());改为 this->remove( this->fromLast());

    保存退出。

    8 缺少系统头文件

    如下图所示:

     

    解决办法如下:

    # gedit .\ qtopia-free-2.2.0\qt2\src\kernel\qpixmapcache.cpp

    修改第 125 行为

     

    即:

    #define PAGE_SHIFT 12

    #define PAGE_SIZE (1UL << PAGE_SHIFT)

    #define PAGE_MASK (~(PAGE_SIZE-1))

    //# include<asm/page.h> //PAGE_SIZE,PAGE_MASK,PAGE_ALIGN

    这样修改是因为新的 Linux 内核源码中已经不包含这个头文件了。

    另外其他的地方也用到了该头文件,同样需要去掉,执行以下命令:

    # gedit ./qtopia-free-2.2.0/qt2/tools/qvfb/qvfbview.cpp

    移动到第 39 行,修改为下图所示:

     

    修改原因是因为 asm/page.h 文件里面定义了一些宏,咱们在这里重新定义了必须使用

    的宏,所以这里就不需要 asm/page.h 文件了。

    说明:继续编译后会出现几次以上类型的错误,出现的错误类型就是以上总结的几种

    (出错的信息通过 google 能找到解决方法),修改方法按以上步骤即可,主要就是发现哪个

    文件出错,找到该文件,用 gedit 打开该文件,移动到出错的行上,修改,保存退出。出错

    的文件和行号是根据编译时的错误提示信息来找到的,一定要查找第一个 Erro 的地方,这里

    是需要重点关注的。通过这几种错误类型的修改,您会对 Qt 移植有了新的认识,也提高了您

    的软件移植能力。

    编译成功完成后,Qtopia2.2.0 会自动的安装到 qtopia-free-2.2.0/qtopia/zImage/opt

    下面,如下图

     

    进入到 Qtopia 录下面,如图:

     

    注 意 : 编 译 好 的 Qtopia 下 面 没 有 字 体 , 自 己 需 要 把 字 体 放

    到 Qtopia/lib/fonts 下面,qtopia-free-2.2.0/qt2/lib/fonts 文件夹下有各种可以用的字

    体,但是我们只需要 helvetica 类型,该类型支持中文。执行以下命令:

    #cp/root/yizhi/qtopia-free-2.2.0/qt2/lib/fonts/Helvetica* /root/yizhi/qtopia-fr

    ee-2.2.0/qtopia/image/opt/Qtopia/lib/fonts/

    另 外 需 要 把/root/yizhi/armlib 下 面 的 文 件 全 部 拷 贝 到

    /root/yizhi/qtopia-free-2.2.0/qtopia/image/opt/Qtopia/lib/下面

    字体文件和库文件拷贝完成后,把 Qtopia 整个录拷贝到文件系统的 /opt 录下面,如

    果该目录下面已经有迅为电子提供的 Qtopia 文件夹,您可以把迅为电子提供的 Qtopia 文件

    夹删除掉,来运行您自己编译的版本,运行方法参考下一章节的 Qtopia2.2.0 的使用。

    更多内容:关注迅为电子

  • 相关阅读:
    08_CSS3简单入门——样式表、选择器
    07_html5简单入门——主体结构元素、非主体结构元素
    06_html5简单入门——框架、可编辑列表、隐藏列表、拼写检测、全局属性
    05_html5简单入门——样式表、块
    Python-容易想不起来的东东
    DNS服务和Bind,bind编译安装,CDN介绍
    逻辑卷管理器LVM
    RAID磁盘阵列
    磁盘管理和文件系统
    软件包管理
  • 原文地址:https://www.cnblogs.com/liyue3/p/12672251.html
Copyright © 2020-2023  润新知