银河麒麟安装QT4.8.6版本
-
主要思路银河麒麟当前版本为V4,不是用的V10。V4的版本是基于ubuntu16进行的开发。所以安装QT4.8.6需要参考ubuntu来安装(这个是错误的,在绕过一大圈后发现这个错误原因,具体应该参考ARM编译QT4.8.6)。
-
首先下载QT4.8.6的源码,推荐找到下载地址后开迅雷下载。
QT4.8.6源码下载地址 -
安装前准备,参考下面的连接,只用参考“步骤1、准备工作”即可(因为是ubuntu环境,这个是走弯路的原因)。
准备工作
sudo apt-get install g++
sudo apt-get install libx11-dev libxext-dev libxtst-dev
- 解压QT4.8.6的包。
tar -xzvf qt-everywhere-opensource-src-4.8.6.tar.gz
后面的步骤就参考ARM情况下编译QT的步骤了。参考下面的链接。
- 修改arm交叉编译器
cd qt-everywhere-opensource-src-4.8.6/mkspecs/linux-arm-gnueabi-g++
vi qmake.conf
修改配置如下:
#
# qmake configuration for building with arm-linux-gnueabi-g++
#
MAKEFILE_GENERATOR = UNIX
TARGET_PLATFORM = unix
TEMPLATE = app
CONFIG += qt warn_on release incremental link_prl gdb_dwarf_index
QT += core gui
QMAKE_INCREMENTAL_STYLE = sublib
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
# modifications to g++.conf
QMAKE_CC = aarch64-linux-gnu-gcc
QMAKE_CXX = aarch64-linux-gnu-g++
QMAKE_LINK = aarch64-linux-gnu-g++
QMAKE_LINK_SHLIB = aarch64-linux-gnu-g++
# modifications to linux.conf
QMAKE_AR = aarch64-linux-gnu-ar cqs
QMAKE_OBJCOPY = aarch64-linux-gnu-objcopy
QMAKE_STRIP = aarch64-linux-gnu-strip
load(qt_config)
注意上面的环境可以在bash下输入看下是否存在相关编译器。
aarch64-linux-gnu-gcc
aarch64-linux-gnu-g++
aarch64-linux-gnu-ar
aarch64-linux-gnu-objcopy
aarch64-linux-gnu-strip
6.配置configure
- -prefix
指定安装路径。默认的安装目录和平台相关,但是在configure时,可以通过-prefix选项指定安装目录,比如./configure -prefix /usr/local/Qt-5.9。这样一来,在执行make install指令时,编译完成的bin、lib或者其他子目录就会拷贝到/usr/local/Qt-5.9/目录中。
交叉编译选项:
- -xplatform
选项指定了目标平台和编译时使用的编译器,Qt支持的平台和编译器都在qtbase/mkspecs目录中。比如,在Ubuntu Linux系统中,Qt能被多种编译器编译,比如clang和g++。如下所示,指定qtbase/mkspecs/linux-arm-gnueabi-g++平台进行编译,也和刚刚修改的文件相对应。
- -opensource
Compile and link the Open-Source Edition of Qt.
所以configure命令如下:
./configure -prefix /usr/local/Qt-4.8.6 -xplatform linux-arm-gnueabi-g++ -opensource
7.make&make install
make会等一段时间
sudo make
make install很快
sudo make install
以上就可以正确的安装QT4.8.6了。
补充说明
-
交叉编译。
交叉编译参考下面的文章。
交叉编译详细说明
因为一开始想的是用ubuntu的方法编译,但是忽略了底层是FT ARM架构。 -
编译平台,注意两者却别。
linux-arm-gnueabi-g++
eabi和oabi区别
OABI中的O,表示“Old”,“Lagacy”,旧的,过时的,OABI就是旧的/老的ABI。
EABI中的E,表示“Embedded”,是一种新的ABI。
EABI有时候也叫做GNU EABI。
OABI和EABI都是专门针对ARM的CPU来说的。 -
注意Make clean。编译失败后再次编译最好先make clean。