Ubuntu16.04 32 bit 交叉编译Arm Linux平台的QT5

时间:2024-04-06 10:47:51

Ubuntu16.04 32 bit 交叉编译Arm Linux平台的QT5

1、准备交叉编译环境

源环境平台:ubuntu16.04 32

目标坏境平台:树莓派,Jetson TK1tinker board, arm平台

配置流程:

1Qt库开源代码,Qt软件,我使用的是5.5.1版本;

2, 安装交叉编译器arm-linux-gnueabihf(gccg++4.9以上版本,支持c++11)

3, 配置Qtcreator 编译器arm-linux-gnueabihf

4,安装目标平台 runtime arm-linux-gnueabihf

5GCC G++编译器在4.8以上,不然会有很奇怪的报错。

1.1、下载Qt软件和源码库

目前Qt x86架构的软件只提供到5.5.1,如果要使用最新的版本,那就需要自己编译了,哈哈,这里就不在叙述。按装QT,大体有三种方式:(推荐12种方式简单bug少)

1offline 去网址下载 https://download.qt.io/archive/qt/5.5/5.5.1/

Ubuntu16.04 32 bit 交叉编译Arm Linux平台的QT5

2online 去网址下载 http://download.qt.io/official_releases/online_installers/

Ubuntu16.04 32 bit 交叉编译Arm Linux平台的QT5

3,命令方式安装(注意:不一定是最新的Qt版本)

      3.1 更新软件源 $ sudo apt-get update

      3.2 替换旧的软件包 $ sudo apt-get upgrade

      3.3 安装 qt5-default $ sudo apt-get install qt5-default –y

      3.4 安装 qtcreator $ sudo apt-get install qtcreator –y

4,下载源码库 https://download.qt.io/archive/qt/5.5/5.5.1/single/

Ubuntu16.04 32 bit 交叉编译Arm Linux平台的QT5

 

1.2、安装交叉编译器

目前市面上有好多交叉编译器,我现在使用linaro公司的交叉编译器,arm-linux-gnueabihf工具编译后的程序不需要联带依赖库一起打包,(这个我喜欢)

下载网址

http://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/arm-linux-gnueabihf/

下载最新版Ubuntu16.04 32 bit 交叉编译Arm Linux平台的QT51,下载完成后,解压在 /usr/local/arm_linux/目录下,方便后续步骤

将其bin目录添加到环境变量PATH中。

2,PATH环境变量方式有很多,我使用的是添加如下图

Ubuntu16.04 32 bit 交叉编译Arm Linux平台的QT5

$ sudo cd /home

$ sudo gedit .bashrc 或者使用vim

$ sudo source .bashrc

3, 坏境变量添加好了,可以测试一下,打开终端

      $ arm-linux-gnueabihf-g++ -v //显示如下就说明配置好了

Ubuntu16.04 32 bit 交叉编译Arm Linux平台的QT5

2 交叉编译Qt库(我这里使用的是Qt-everywhere-opensource-src-5.5.1.tar.gz

1, 解压Qt源码库

         $ cd /home/Qt  //没有Qt目前自己新建

         $ Sudo tar xpf qt-everywhere-opensource-src-5.5.1.tar.gz

2,编译QT源码程序之前,首先要对/qt-everywhere-opensource-src-5.5.1/qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf 做修改。

         $ cd /qt-everywhere-opensource-src-5.5.1/qtbase/mkspecs/linux-arm-gnueabi-g++/

         $ sudo gedit qmake.conf

         修改前:

Ubuntu16.04 32 bit 交叉编译Arm Linux平台的QT5

修改后:

Ubuntu16.04 32 bit 交叉编译Arm Linux平台的QT5

 

3,编译QT源码程序

./configure -release -opengl es2 -device linux-rasp-pi2-g++ -device-option CROSS_COMPILE=$TOOLCHAIN/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf- -sysroot $ROOTFS -prefix /usr/local/qt5

 

         Ubuntu16.04 32 bit 交叉编译Arm Linux平台的QT5

指令详解:

./configure

-release 直接编译发布版

-opensource  开源版

-device linux-rasp-pi2-g++ 运行设备名称(具体可以到qt-everywhere-opensource-src-5.7.1/qtbase/mkspecs/devices/目录查看支持的设备)

Ubuntu16.04 32 bit 交叉编译Arm Linux平台的QT5

-device-option CROSS_COMPILE=arm-linux-gnueabihf-  交叉编译器选择的类型arm-linux-gnueabihf-

 -prefix /opt/Qt5.5.1/armv7-a 编译好的程序安装路径

 -sysroot /mnt/bananapro  编译的头文件和选择,需要挂载源img包,(这个部分折腾了一段时间,没有搞定,爱折腾的朋友可以去试一下)

-hostprefix /opt/Qt5.6.0/host运行设备安装位置

-opengl es2   一般不需要

-libinput Synopsis  一般不需要

 

我使用的方式:

1),    sudo ./configure -prefix /opt/qt5.5.1-arm-linux -opensource -nomake tests -nomake examples  -xplatform linux-arm-gnueabi-g++

 

 

2),  sudo  make (也可以make –j4, 个人不推荐使用,莫名其妙问题)。

(adjust the `-jN' parameter as appropriate for your system)

 

                       cc1plus: all warnings being treated as errors

Makefile:44193: recipe for target '.obj/qmimedata.o' failed

make[3]: *** [.obj/qmimedata.o] Error 1

make[3]: *** 正在等待未完成的任务....

make[3]: Leaving directory '/root/qt-everywhere-opensource-src-5.7.1/qtbase/src/corelib'

Makefile:194: recipe for target 'sub-corelib-make_first' failed

make[2]: *** [sub-corelib-make_first] Error 2

make[2]: Leaving directory '/root/qt-everywhere-opensource-src-5.7.1/qtbase/src'

Makefile:46: recipe for target 'sub-src-make_first' failed

make[1]: *** [sub-src-make_first] Error 2

make[1]: Leaving directory '/root/qt-everywhere-opensource-src-5.7.1/qtbase'

Makefile:77: recipe for target 'module-qtbase-make_first' failed

make: *** [module-qtbase-make_first] Error 2

 

3),sudo make install

 

4,检查QT安装的状态

         1),打开终端

         Cd /opt/qt5.7.1-arm

         正常有如下文件:

Ubuntu16.04 32 bit 交叉编译Arm Linux平台的QT5

3 配置Qtcreator 编译器arm-linux-gnueabihf

1), 安装qt-opensource-linux-x86-5.5.1.run

2), 安装完成后,接下来配置:

  ~工具->选项

Ubuntu16.04 32 bit 交叉编译Arm Linux平台的QT5

 

~构建和运行

Ubuntu16.04 32 bit 交叉编译Arm Linux平台的QT5

 

~Qt versions 手动添加一个qmake (添加自己前面交叉编译好的Qt程序,/opt/qt5.5.1-arm-linux/bin)

Ubuntu16.04 32 bit 交叉编译Arm Linux平台的QT5

 

~添加好了qmake 项,我这里两个版本,都有编译。

 

Ubuntu16.04 32 bit 交叉编译Arm Linux平台的QT5

 

~编译器-> 手动添加GCC

 

Ubuntu16.04 32 bit 交叉编译Arm Linux平台的QT5

Ubuntu16.04 32 bit 交叉编译Arm Linux平台的QT5

 

~debuggers-> 手动添加gdb

 

Ubuntu16.04 32 bit 交叉编译Arm Linux平台的QT5

 

~构建套件(Kit)(sysroot看自己吧,有的同学用到这个了,我目前没有用到)

 

Ubuntu16.04 32 bit 交叉编译Arm Linux平台的QT5

~好了,到这里我们算是完成了第一步

 

 

4 安装目标平台

添加设备项:

Ubuntu16.04 32 bit 交叉编译Arm Linux平台的QT5

Ubuntu16.04 32 bit 交叉编译Arm Linux平台的QT5

Ubuntu16.04 32 bit 交叉编译Arm Linux平台的QT5

 

 

Ubuntu16.04 32 bit 交叉编译Arm Linux平台的QT5

 

~哈哈Ubuntu16.04 32 bit 交叉编译Arm Linux平台的QT5到这里我们算是完成了所有配置工了。

 

创建一个项目吧

 

Ubuntu16.04 32 bit 交叉编译Arm Linux平台的QT5

 

Ubuntu16.04 32 bit 交叉编译Arm Linux平台的QT5

测试一下效果:

Ubuntu16.04 32 bit 交叉编译Arm Linux平台的QT5

 

来看看设备效果吧,

 

Ubuntu16.04 32 bit 交叉编译Arm Linux平台的QT5

 

运行ok

 

注意事项: 这种流程只适合调用Qt内部的库,没有问题,如果调用内核底层库的时候,比如动态库的时候,就会出现类似没有找到XCB 的故障问题,不能运行。

 

1The test for linking against libxcb failed!

 Use of pkg-config is not enabled, maybe you want to pass -pkg-config?

 You might need to install dependency packages for libxcb.

 

2 See src/plugins/platforms/xcb/README.,,

/home/ubuntu//untitled3: /usr/lib/arm-linux-gnueabihf/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by /home/ubuntu//untitled3)

Application finished with exit code 1.

 

以上问题我已经解决,后续………..

 

中上所述,我走过了很多坑,不希望朋友们再入坑,先写到这里,有什么不足之处,请体谅,谢谢