在IMX6ULL上搭建QT交叉编译环境上

1、下载安装通用的 ARM 交叉编译器

进入官网下载地址

 

 2、上传到Ubuntu 解压安装即可

3、创建一个文件夹,用于存放解压后交叉编译器的存放位置(注意这个位置一定要记住)

mkdir /usr/local/arm
sudo tar xf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz -C /usr/local/arm/

在IMX6ULL上搭建QT交叉编译环境上_第1张图片

解压后的工具链

在IMX6ULL上搭建QT交叉编译环境上_第2张图片

 3、更改配置文件/etc/profile添加交叉编译器环境变量,添加如下内容

export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin

在IMX6ULL上搭建QT交叉编译环境上_第3张图片

 4、重启系统reboot,使其生效。

 5、输入命令测试是否安装成功

arm-linux-gnueabihf-gcc -v

在IMX6ULL上搭建QT交叉编译环境上_第4张图片

看到版本号即安装成功。

二、移植QT库

1、QT界面想要支持触摸需要先移植tslib库,获取库tslib库可在GitHub官网上下载tslib地址

 在IMX6ULL上搭建QT交叉编译环境上_第5张图片

2、解压、编译安装

可以看到没有Makefile文件还不能直接编译,需要配置生成Makefile。

在IMX6ULL上搭建QT交叉编译环境上_第6张图片

 先安装一些工具让其执行autogen.sh自动重新配置一下。

sudo apt-get install autoconf automake libtool

在IMX6ULL上搭建QT交叉编译环境上_第7张图片

执行脚本./autogen.sh进行自动配置

在IMX6ULL上搭建QT交叉编译环境上_第8张图片

执行配置命令进行配置生成Makefile

./configure  --host=arm-linux-gnueabihf ac_cv_func_malloc_0_nonnull=yes --cache-file=/home/alientek/tslib-1.21/arm-tslib

在IMX6ULL上搭建QT交叉编译环境上_第9张图片

在IMX6ULL上搭建QT交叉编译环境上_第10张图片

 接下来执行make编译

make install 进行安装

在IMX6ULL上搭建QT交叉编译环境上_第11张图片

安装成功后此目录会生成如下文件夹。

在IMX6ULL上搭建QT交叉编译环境上_第12张图片

三、获取ARM平台的QT源码,进行编译,生成QT库移植到开发板

1、下载 Qt5.12.9 源码,进入官网入口地址

这里使用wget命令下载到当前目录

wget https://download.qt.io/archive/qt/5.12/5.12.9/single/qt-everywhere-src-5.12.9.tar.xz

2、进行源码解压

tar xvf qt-everywhere-src-5.12.9.tar.xz

在IMX6ULL上搭建QT交叉编译环境上_第13张图片

3、进行配置,由于QT库配置项较多,统一放到脚本上

先查看配置文件qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf里面设置的编译器选项和开发板型号对不对。

#
# qmake configuration for building with arm-linux-gnueabi-g++
#

MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublib

QT_QPA_DEFAULT_PLATFORM = linuxfb
QMAKE_CFLAGS += -O2 -march=armv7-a -mtune=cortex-a7 -mfpu=neon -mfloat-abi=hard
QMAKE_CXXFLAGS += -O2 -march=armv7-a -mtune=cortex-a7 -mfpu=neon -mfloat-abi=hard

include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)

# modifications to g++.conf
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 to linux.conf
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)

配置脚本gedit  autoconfigure.sh添加如下内容,放到QT库顶层源码目录上

./configure -prefix /home/alientek/qt-everywhere-src-5.12.9/arm-qt \
-opensource \
-confirm-license \
-release \
-strip \
-shared \
-xplatform linux-arm-gnueabi-g++ \
-optimized-qmake \
-c++std c++11 \
--rpath=no \
-pch \
-skip qt3d \
-skip qtactiveqt \
-skip qtandroidextras \
-skip qtcanvas3d \
-skip qtconnectivity \
-skip qtdatavis3d \
-skip qtdoc \
-skip qtgamepad \
-skip qtlocation \
-skip qtmacextras \
-skip qtnetworkauth \
-skip qtpurchasing \
-skip qtremoteobjects \
-skip qtscript \
-skip qtscxml \
-skip qtsensors \
-skip qtspeech \
-skip qtsvg \
-skip qttools \
-skip qttranslations \
-skip qtwayland \
-skip qtwebengine \
-skip qtwebview \
-skip qtwinextras \
-skip qtx11extras \
-skip qtxmlpatterns \
-make libs \
-make examples \
-nomake tools -nomake tests \
-gui \
-widgets \
-dbus-runtime \
--glib=no \
--iconv=no \
--pcre=qt \
--zlib=qt \
-no-openssl \
--freetype=qt \
--harfbuzz=qt \
-no-opengl \
-linuxfb \
--xcb=no \
-tslib \
--libpng=qt \
--libjpeg=qt \
--sqlite=qt \
-plugin-sql-sqlite \
-I/home/alientek/tslib-1.21/arm-tslib/include \
-L/home/alientek/tslib-1.21/arm-tslib/lib \
-recheck-all

 使用echo $?返回0即配置成功。在IMX6ULL上搭建QT交叉编译环境上_第14张图片

 查看是否有Makefile文件

在IMX6ULL上搭建QT交叉编译环境上_第15张图片

接下来就是编译时刻了,简单粗暴 make(当然为了快一点建议使用多核编译)time只是为了统计编译时间,这样对以后工作时间有个规划。-j 4 表示使用4核编译具体看虚拟机的核数决定。

time (make -j 4)

在IMX6ULL上搭建QT交叉编译环境上_第16张图片

编译如下即编译成功

在IMX6ULL上搭建QT交叉编译环境上_第17张图片

至此经过漫长编译先小结一下,注意目前只完成QT交叉编译环境搭建的1/3,由于幅篇比较长,后续移植QT库到开发板上请关注笔者的下篇《在IMX6ULL上搭建QT交叉编译环境下》。

 

 

 

 

你可能感兴趣的:(arm开发)