鲲鹏920(ARM64) Qt 4.8.6 移植指南for CentOS-7.6
【摘要】 Qt 是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,Qt很容易扩展,并且允许真正地组件编程。 本文以Qt 4.8.6版本编译为例2 环...
1 简介
Qt 是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,Qt很容易扩展,并且允许真正地组件编程。
本文以Qt 4.8.6版本编译为例
2 环境
类别 | 子项 | 版本 | 获取地址(方法) |
硬件 | CPU | 鲲鹏920 | -- |
OS | CentOS | 7.6.1810 | |
Kernel | 4.14.0 | ||
软件 | GCC | 4.9.3 | |
libtool | 2.4.2 |
3 依赖安装
3.1 安装基础依赖
yum install gcc gcc-c++ autoconf automake patch libX11-devel libXext-devel libXtst-devel |
3.2 升级gcc
检查gcc版本,若是4.9.3以下的版本,则升级至4.9.3版本
gcc -v |
升级操作可参考如下链接:
https://bbs.huaweicloud.com/forum/thread-19219-1-1.html
4 编译安装
4.1 Qt4编译及安装过程(以4.8.6版本举例)
4.1.1 下载qt源码包
wget http://download.qt.io/archive/qt/4.8/4.8.6/qt-everywhere-opensource-src-4.8.6.tar.gz |
4.1.2 解压缩源码包:
tar -zxvf qt-everywhere-opensource-src-4.8.6.tar.gz |
4.1.3 打入补丁
访问http://cgit.openembedded.org/openembedded-core/tree/meta/recipes-qt/qt4/qt4-4.8.6?h=fido
下载如下4个patch文件至解压后的源码目录,输入下面命令打入补丁
patch -p1<0029-aarch64_arm64_fix_arch_detection.patch patch –p1 < 0030-aarch64_arm64_qatomic_support.patch patch –p1 < 0031-aarch64_arm64_mkspecs.patch patch –p1 < 0032-aarch64_add_header.patch |
4.1.4 编译安装
1、在终端运行./configure,然后选择安装类型,输入o表示开源版。然后输入yes接受GPL协
2、运行gmake –j64,等待Qt编译完成。
3、当make完成后,运行gmake install,等待安装过程结束。
4.1.5 设置环境变量:
vi ~/.bash_profile |
在.bash_profile文件末尾添加下面几行:
export QTDIR=/usr/local/Trolltech/Qt-4.8.6 export PATH=$QTDIR/bin:$PATH export MANPATH=$QTDIR/man:$MANPAT export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH |
保存退出后,执行如下命令,使配置生效
使用qmake -v校验Qt版本,完成编译安装
5 测试
5.1 编译并生成standarddialogs项目
1) 使用示例源码:
$:/usr/local/Trolltech/Qt-4.8.6/examples/dialogs/standarddialogs
2) 编译执行过程及效果
5.2 运行qtdemo程序
6 FAQ
6.1 编译报错
6.1.1 使用高版本gcc编译会遇到如下报错
原因:调用重载的‘swap(std::pair<QTWTF::RefPtr<QTJSC::UStringImpl>, QTJSC::SymbolTableEntry>&, std::pair<QTWTF::RefPtr<QTJSC::UStringImpl>, QTJSC::SymbolTableEntry>&)’和G++ STL的定义有歧义 template<typename T> struct Mover<T, true> { static void move(T& from, T& to) { swap(from, to); } };
需要禁用C++11特性。
修改方法:在mkspecs\linux-g++\qmake.conf 添加如下行
QMAKE_CXXFLAGS = $$QMAKE_CFLAGS -std=gnu++98
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
热门文章
评论(0)