【Cubietruck】Qt5.8.0 x64、x86、armhf三个版本的编译安装

时间:2022-09-01 08:19:48

一、       Preparation

以下环境配置支持虚拟机和实体机,但是实体机生产效率会相对高一点,实体机编译Qt的速度是虚拟机两倍以上。

若使用虚拟机,推荐使用VirtualBox,开源免费,尽量不要使用Vmware破解版。

 

Download List

 

名称

链接

下载项目

OS

https://mirror.tuna.tsinghua.edu.cn/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1611.iso

CentOS-7-x86_64-Minimal-1611.iso

Armhf toolchain

https://releases.linaro.org/components/toolchain/binaries/4.9-2016.02/arm-linux-gnueabihf/

gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf.tar.xz

sysroot-linaro-eglibc-gcc4.9-2016.02-arm-linux-gnueabihf.tar.xz

Qt5.8

http://download.qt.io/archive/qt/5.8/5.8.0/

 qt-opensource-linux-x64-5.8.0.run

qt-everywhere-opensource-src-5.8.0.tar.gz

 

 

二、       System Installation

OS:CentOS 7 x86_x64

[虚拟机:>= VirtualBox 5]

 

三、       System Configuration

以下除特殊说明,所有操作均使用root角色,请确保网络通畅(可以使用代理网络,这里不说明如何使用网络代理)。

 

1.    ConfitureNetwork

ip addr  #查看网络是否启用,及对应网卡名称,假设为enpos3

service network restart  #重启网络

 

#开机自动启动网络

vi /etc/sysconfig/network-scripts/ifcfg-enp0s3   #将ONBOOT=no改为ONBOOT=yes

 

ip addr  #查看网络是否已经可用

 

systemctl stop firewalld.service #停止firewall

systemctl disable firewalld.service #禁止firewall开机启动

firewall-cmd --state #查看防火墙状态

 

#设置yum网络代理,针对虚拟机无法直接连接办公网络,若可以联网则无需设置

         vi /etc/yum.conf  #在最下面新增一行,填写代理ip和端口,示例:proxy=http://192.168.10.209:3128

 

2.    Installthe epel Repository

yum makecache   #更新镜像包列表

yum install epel-release -y  #安装epel镜像包

 

使用技巧:

如果epel的源很慢,在使用yum安装一些常用软件时,新建/etc/yum.repos.d/backup,将epel.repo和epel-test.repo放到backup,就不会启用epel,然后安装就会很快,如果安装时发现找不到的软件,就将epel移动到原来位置再安装。

 

3.    InstallXfce Desktop Environment

#清空镜像包列表

yum clean all

 

#更新epel镜像包列表

yum makecache  

 

#安装X server

yum groupinstall "X Window system" -y   

 

#安装xfce桌面

yum groupinstall Xfce -y  

 

#默认启动图形界面

ln -sf /lib/systemd/system/graphical.taget/etc/systemd/system/default.target  

 

reboot   #重启查看是否完成桌面安装

 

#安装一些必备软件

yum install file-roller network-manager-applet cjkuni-ukai-fonts firefoxgcc gcc-c++ gdb nano gedit git svn ibus ibus-libpinyin ibus-gtk2/3 im-choosergtk2/3-immodule-xim perl -y

 

file-roller  #thunar文件管理器右键修复

network-manager-applet    #网络管理器,无需wifi则不用安装

cjkuni-ukai-fonts  #楷体,支持中文

firefox                #firefox浏览器,使用Firefox时注意是否需要代理网络

gcc gcc-c++      #gccg++

gdb            #gdb调试工具

nano gedit                #nanogedit文本编辑器

git svn     #版本控制软件

ibus ibus-libpinyin ibus-gtk2/3 im-choosergtk2/3-immodule-xim  #中文输入法

perl   #gmake Qt时要调用perl执行脚本

 

 

#配置输入法

im-chooser    #此处两个命令使用普通用户执行,即Xfce登录账户,选择ibus,并配置默认输入法,注销重新登录

ibus-setup        #设置快捷键,勾选Customizeactive input methods,增加Chinese-Intelligent-Pinyin

 

4.    Installx64 & x86 Library

#安装C与C++相关Library

yum install libgcc libgcc.i686 libstdc++-devel libstdc++-devel.i686 glibc-staticglibc-static.i686 glibc-devel glibc-devel.i686 zlib zlib.i686 libstdc++ libstdc++.i686-y

 

yum update   #此步骤可以省略,更新所有旧的软件

 

 

5.    CopyQt5.8.0 and toolchain

将下载的Qt5.8.0_x64.run文件、Qt5.8.0源码文件、armhf-gcc以及sysroot复制到CentOS7中。

可以安装VirtualBox增强工具来实现虚拟机与主机之间的文件共享和剪贴板共享,或者使用ftp传输。

 

6.    InstallQt5.8.0_x64

#增加可执行权限

chmod +x qt-opensouce-linux-x64-5.8.0.run  

 

#安装qt5.8.0_x64二进制文件

./qt-opensouce-linux-x64-5.8.0.run

 

#创建链接,方便root用户调用(因为部分权限需要root用户来执行Qt调试)

ln -s /opt/Qt5.8.0/Tools/QtCreator/bin/qtcreator /usr/sbin 

 

 

7.    Compileand Install Qt5.8.0_x86

#解压qt5.8.0源码

tar -xzvf qt-everywhere-opensource-src-5.8.0.tar.gz  -C qt-everywhere-opensource-src-5.8.0_x86

 

#进入qt5.8.0源码目录

cd qt-everywhere-opensource-src-5.8.0_x86 

 

#配置qt5.8.0_x86编译条件

./configure -release -opensource -confirm-license -prefix/opt/Qt5.8.0_x86 -xplatform linux-g++-32 -nomake examples -nomake tests -no-opengl

 

#测试qtbase编译是否有问题

gmake -j4 module-qtbase  #使用四线程编译

 

#没有问题则整体编译,并安装

gmake -j4 & gmake install

 

#删除源码活页夹,在Qt5.8.0_x64附带的QtCreator中添加Qt5.8.0_x86版本

 

8.    Compileand install Qt5.8.0_armhf

#解压qt5.8.0源码

tar -xzvf qt-everywhere-opensource-src-5.8.0.tar.gz -C qt-everywhere-opensource-src-5.8.0_armhf

 

#解压armhf-gcc

xz -d gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf.tar.xz

tar -xvf gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf.tar -C /opt

 

# 解压sysroot

xz -d sysroot-linaro-eglibc-gcc4.9-2016.02-arm-linux-gnueabihf.tar.xz 

tar -xvf sysroot-linaro-eglibc-gcc4.9-2016.02-arm-linux-gnueabihf.tar-C /opt

 

#进入源码目录

cd qt-everywhere-opensource-src-5.8.0_armhf

 

#修改platform的toolchain

gedit qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf

 

################################################

# 以下为修改后的 qmake.conf 内容

 

 

#

# qmake configuration for buildingwith arm-linux-gnueabi-g++

#

 

MAKEFILE_GENERATOR      = UNIX

CONFIG                 += incremental

QMAKE_INCREMENTAL_STYLE = sublib

 

include(../common/linux.conf)

include(../common/gcc-base-unix.conf)

include(../common/g++-unix.conf)

 

QT_QPA_DEFAULT_PLATFORM = linuxfb

 

QMAKE_CFLAGS_RELEASE   += -O2 -march=armv7-a

QMAKE_CXXFLAGS_RELEASE += -O2-march=armv7-a

 

# modifications to g++.conf

QMAKE_CC  = /opt/gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc

QMAKE_CXX  = /opt/gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++

QMAKE_LINK = /opt/gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++

QMAKE_LINK_SHLIB = /opt/gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++

# modifications to linux.conf

QMAKE_AR  = /opt/gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-arcqs

QMAKE_OBJCOPY =/opt/gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-objcopy

QMAKE_NM = /opt/gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-nm-P

QMAKE_STRIP  = /opt/gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-strip

load(qt_config)

 

# qmake.conf end

##############################################

 

#配置,跳过两个模块,这两个模块目前编译有问题,另外使用由于gcc限制,只使用c++11特性

./configure -release -opensource -confirm-license -prefix/opt/Qt-5.8.0_armhf -xplatform linux-arm-gnueabi-g++ -no-opengl -c++std c++11-no-dbus -nomake examples -nomake tests -skip qtdeclarative -skip qtpurchasing

 

#仅编译核心部分测试是否有问题

sudo make -j4 module-qtbase

 

#编译整体并安装

sudo make -j4 & make install

 

#删除源码活页夹,在Qt5.8.0_x64附带的QtCreator中添加Qt5.8.0_armhf版本,sysroot以及armhf-gcc、armhf-g++、armhf-gdb

 

#程序移植

程序移植到armhf开发板上需要用到两方面的Library,一个是arm-gcc的Library,另一个是Qt-Library。

移植方式为:

1、     拷贝/opt/gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf和Qt需要的Library (libstdc++.so.6, libQt5Network.so.6,libQt5Core.so.6等)到开发板/opt/lib中

2、     在开发板输入命令:export LD_LIBRARY_PATH=/opt/lib:$LD_LIBRARY_PATH,增加搜索的Library路径(仅本次有效,防止出错,可以重启失效)

3、     在开发板测试程序是否正常运行

4、     确认程序运行正常后,在开发板将搜索库命令写入/etc/profile中或者~/.bashrc开机启动。

 

Cubietruck官方测试通过的镜像为:debian-jessie-server-ct-card0-hdmi&&vga-V1.0.img.7z

 

如果cubietruck的OS不是使用自行编译出来的,可能存在glibc版本过低的问题。

 

若出现/lib/arm-linux-gnueabihf/libc.so.6: version `GLIBC_2.17' not found,则表示开发板的glibc版本过低,而交叉编译程序使用的glibc版本较高,Copy arm-gcc 中对应的libc.so.6到开发板的/opt/lib中,再次运行。

若出现error while loading shared libraries: /opt/lib/libc.so.6: unexpectedreloc type 0xa0,则说明arm-gcc中的libc不可用,强制重启,删除/opt/lib/libc.so.6,此系统无法使用,建议更换新版本系统或者自行编译出OS烧录到开发板中。