鲲鹏920(ARM64) Qt 4.8.6 移植指南for CentOS-7.6

举报
wind@汪汪队 发表于 2020/02/10 11:38:56 2020/02/10
【摘要】 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

下载如下4patch文件至解压后的源码目录,输入下面命令打入补丁

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接受GPL1581305243993538.png

 

2、运行gmake j64,等待Qt编译完成。

截图2.PNG

3、当make完成后,运行gmake install,等待安装过程结束。

截图3.PNG

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

保存退出后,执行如下命令,使配置生效

source ~/.bash_profile

使用qmake -v校验Qt版本,完成编译安装

截图4.PNG

5 测试

5.1 编译并生成standarddialogs项目

1)        使用示例源码:

$:/usr/local/Trolltech/Qt-4.8.6/examples/dialogs/standarddialogs

2)        编译执行过程及效果

截图5.PNG

5.2 运行qtdemo程序

截图8.png

 截图6.PNG

 

 

6 FAQ

6.1 编译报错

6.1.1 使用高版本gcc编译会遇到如下报错

截图7.PNG

 

 

原因:调用重载的‘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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。