Ubuntu16.04ARMQt交叉编译环境搭建
嵌⼊式开发
Ubuntu16.04 ARM/Qt 交叉编译环境搭建
最近由于⼯作需要,接触到交叉编译,鉴于之前没有完整做过这⽅⾯的⼯作,记录⼀下。后续也会尽量把相关的内容都加⼊进来
背景
客户需求要在嵌⼊式环境中使⽤相机,这个相机之前有完整的windows版本SDK,嵌⼊式下⾯还没开发过,因此需要移植,⽬前考虑的主要问题就是环境搭建吧,代码理论上应该不需要改动或者改动⽐较⼩。客户⽤的开发板是toybrick-3399Pro,⽬前⼿上只有Firefly-
RK3288,两个架构有所不同,前者是六核ARM 64位处理器(双核Cortex-A72+四核Cortex-A53),ARMv8指令集,后者是四核ARM 32位处理器(四核Cortex-A17),ARMv7-A指令集,对于交叉编译来说,就是32位和64位的区别。为了验证整个移植过程,先在Firefly-RK3288上跑通Qt Demo,然后再更换交叉编译⼯具,编好后给客户测试。
(32位和64位会放在⼀起说明,不同的平台基本步骤是⼀样,如果是⾃⼰⽤,针对⾃⼰的平台处理⼀种就⾏了,没必要32位和64位都下载)
环境说明
服务器:虚拟机+ubuntu16.04 64位
安装交叉编译⼯具
所有操作都在root权限下进⾏。
交叉编译安装⽅法有两种:可以直接apt-get安装,也可以⾃⼰下载源⽂件
1、apt-get安装
$sudo apt-get install gcc-arm-linux-gnueabihf
$sudo apt-get install g++-arm-linux-gnueabihf
这种安装⽅式,不需要⼿动添加环境变量,安装完成后,交叉编译⼯具会放在/usr/bin⽬录下
名称syscall指令集⼤⼩端位宽description aarch64-linux-gnu linux ARMv8little64aarch64 Linux Platform
aarch64_be-linux-gnu linux ARMv8big64aarch64 Linux Platform
arm-linux-gnu-gnueabi linux ARMv7little32arm EABI soft-float
arm-linux-gnu-gnueabihf linux ARMv7little32arm EABI hard-float
armeb-linux-gnu-gnueabi linux ARMv7big32arm EABI soft-float
armeb-linux-gnu-gnueabihf linux ARMv7big32arm EABI hard-float arm-eabi BareMetal ARMv7little32arm EABI hard-float
armeb-eabi BareMetal ARMv7big32arm EABI soft-float
aarch64-elf BareMetal ARMv8little64armv8 EABI,hard-float
对于32位arm平台下载
.
因为后⾯还有64位平台需要处理,所以还下载了64位的交叉编译⼯具
.
下载完成后,⼿动安装:
$tar -xvf gcc-linaro-7.3.1-2018.05-x86_64_
$mv gcc-linaro-7.3.1-2018.05-x86_64_ arm-linux-gnueabihf-7.3.1// 这⾥根据⾃⼰喜好重命名
$sudo cp -rf arm-linux-gnueabihf-7.3.1/opt // 这个路径也是⾃定义的,后⾯把环境变量配成⼀致就⾏
上⾯的操作是把压缩包,解压、重命名后,放到/opt⽬录下⾯,⽬录是可以⾃定义的。对于64位的⼯具,也是类似的操作,名字不要重复。
$tar -xvf gcc-linaro-7.3.1-2018.05-x86_64_
$mv gcc-linaro-7.3.1-2018.05-x86_64_ aarch64-linux-gnu-7.3.1
$sudo cp -rf aarch64-linux-gnu-7.3.1/opt
安装完成后,还需要⼿动添加环境变量,修改/etc/bash.bashrc⽂件
sudo vi /etc/bash.bashrc
在最后加上
PATH=$PATH:/opt/arm-linux-gnueabihf-7.3.1/bin
对于64位⼯具:
PATH=$PATH:/opt/aarch64-linux-gnu-7.3.1/bin
这⾥的⽬录根据实际情况修改.
执⾏以下命令⽴即⽣效:
source /root/.bashrc
测试是否安装成功:
$arm-linux-gnueabihf-gcc -v
$aarch64-linux-gnu-gcc -v
如果正常获取到版本等信息,说明安装没有问题。
下载Qt源码包
因为后⾯要在开发板上跑qt程序,所以必须下载qt源码包,然后⽤交叉编译⼯具进⾏编译,才能得到在⽬标平台上可以运⾏的qt SDK 我下载的是5.9.3版本
链接: .
编译Qt源码
1、定义Qt5.9.3的SDK路径
编译前确定好SDK路径。因为我需要编译两个版本,所以,我建了两个⽬录, /opt/qt-5.9.3-arm⽤来存放32位的,/opt/qt-5.9.3-arm64⽤来存放64位的
$sudo mkdir /opt/qt-5.9.3-arm
$sudo mkdir /opt/qt-5.9.3-arm64
2、修改f
对于32位平台:
qt-everywhere-opensource-src-5.5.1/qtbase/mkspecs/linux-arm-gnueabi-g++/f
对于64位平台:
qt-everywhere-opensource-src-5.5.1/qtbase/mkspecs/linux-aarch64-gnu-g++/f
QMAKE_CC= arm-linux-gnueabihf-gcc
QMAKE_CXX= arm-linux-gnueabihf-g++
QMAKE_LINK= arm-linux-gnueabihf-g++
QMAKE_LINK_SHLIB= arm-linux-gnueabihf-g++
# modifications f
QMAKE_AR= arm-linux-gnueabihf-ar cqs
QMAKE_OBJCOPY= arm-linux-gnueabihf-objcopy
QMAKE_NM= arm-linux-gnueabihf-nm -P
QMAKE_STRIP= arm-linux-gnueabihf-strip
load(qt_config)
将原内容的arm-linux-gnueabi交叉编译器换成⾃⼰的,
32位平台换成 arm-linux-gnueabi
64位平台换成aarch64-linux-gnu
当然,如果你下载的是其他交叉编译器,换成你对应的平台交叉编译器即可。如果不知道如何修改,可在终端上输⼊aarch64-linux-gnu-gcc -v,打印出来信息中有⼀⾏Target:后⾯的内容替换上⾯原内容中的arm-linux-gnueabi即可。
3、 执⾏Configure
进⼊到源码⽬录
$cd qt-everywhere-opensource-src-5.9.3
$./configure -release -nomake examples -no-iconv -no-opengl -no-assimp -no-qt3d-profile-jobs -no-qt3d-profile-gl -xplatform linux-arm-gnueabi-g++-prefix /opt/qt-5.9.3-arm -opensource -confirm-license
这⾥,有很多配置项,简单说明下:
-prefix选项后⾯的路径就是第⼀步中定义的Qt SDK路径,对于不同的平台,注意⽬录要对应
-no-opengl -no表⽰不编译该模块
删掉了opengl、Qt3D相关的库、examples,编译他们三个可能会导致编译失败
还有⼀些参数,可以参考其它⽂章。
4、 编译
$sudo make -j4
这⾥编译需要时间较久
5、 安装
$sudo make install
如果上述过程均未报错,那么Qt SDK就编译完成了。
安装QtCreator
在虚拟机ubuntu上安装qtcreator。如果之前安装过,可以不⽤再安装,版本关系不⼤。
下载安装包:
这个是linux64位桌⾯版的Qt,⾃带Qt Creator。把他复制到ubuntu中后,进⼊到⽂件⽬录,运⾏下⾯命令,图像化安装。
./qt-creator-opensource-linux-x86_64-4.5.2.run
配置QtCreator
将交叉编译⼯具配置到qt creator中,⼯具–>选项。
1、配置编译器。
⼿动添加GCC C和C++编译器,GCC(ARM)是我安装的32位的交叉编译⼯具,名称可以⾃⼰命令,路径指向交叉编译⼯具。如果是apt-get安装的,在/usr/bin⽬录下,如果是⼿动安装的,根据⾃⼰的实际路径去
GCC(c++, arm 64bit)是我安装的64位的交叉编译⼯具
下⾯的C编译器也是类似的添加
gnu编译器⼿动添加编译好的qt路径
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论