移植 Qt 至 tiny210 详细过程

实验所需资源:

  1. tiny210(cortex-a8)
  2. QT 版本:5.6.2
  3. PC 环境:UBUNTU
  4. tslib:tslib-1.4
  5. 交叉工具链:4.5.1
  6. 开发板已装载好 Linux

编译 tslib

可能需要安装的库:

sudo apt-get install autoconf
sudo apt-get install automake
sudo apt-get install libtool

编译安装步骤如下:

tar xzf tslib-1.4.tar.gz
cd tslib
./autogen.sh 

mkdir tmp
echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
./configure --host=arm-linux --cache-file=arm-linux.cache --prefix=$(pwd)/tmp

make
make install

更改 tslib 配置文件

sudo vim tmp/etc/ts.conf 
去掉 # module_raw input 前面的“#”和空格

编译 QT5.6.2

解压 QT 后,进入到该文件夹。

构造一个 build.sh 脚本,内容如下:

#!/bin/bash

./configure \
  -no-c++11 \
  -prefix /Qt5 \
  -opensource \
  -release \
  -confirm-license \
  -xplatform linux-arm-gnueabi-g++ \
  -shared \
  -qt-zlib \
  -no-gif \
  -qt-libjpeg \
  -no-opengl \
  -no-cups \
  -no-glib \
  -no-dbus \
  -no-rpath \
  -no-sse2 -no-sse3 -no-ssse3 -no-sse4.1 -no-sse4.2 \
  -no-avx \
  -no-openssl \
  -nomake tools \
  -qreal float \
  -qt-libpng \
  -tslib \
  -verbose \
  -nomake examples \
  -I /Qt5.6/tslib/tmp/include \
  -L /Qt5.6/tslib/tmp/lib

修改配置文件:

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

加上:
    QT_QPA_DEFAULT_PLATFORM = linuxfb
    QMAKE_CFLAGS  += -msoft-float -D__GCC_FLOAT_NOT_NEEDED -march=armv7-a -mtune=cortex-a8
    QMAKE_CXXFLAGS += -msoft-float -D__GCC_FLOAT_NOT_NEEDED -march=armv7-a -mtune=cortex-a8
    
将
  # modifications to g++.conf
  QMAKE_CC = arm-linux-gnueabi-gcc
  QMAKE_CXX = arm-linux-gnueabi-g++
  QMAKE_LINK = arm-linux-gnueabi-g++
  QMAKE_LINK_SHLIB = arm-linux-gnueabi-g++
改为
  # modifications to g++.conf
  QMAKE_CC = arm-linux-gnueabi-gcc -lts -ldl
  QMAKE_CXX = arm-linux-gnueabi-g++ -lts -ldl
  QMAKE_LINK = arm-linux-gnueabi-g++ -lts -ldl
  QMAKE_LINK_SHLIB = arm-linux-gnueabi-g++ -lts -ldl

chmod 777 build.sh
./build.sh
make -J4
make install

QT 编译过程中可能需要的库

UBUNTU 使用以下命令安装

xcb 库:

sudo apt-get install "^libxcb.*" libx11-xcb-dev libglu1-mesa-dev libxrender-dev

一开始我是用 4.3.2 版本的工具链来编译 QT 的,到最后却报了

ld: hidden symbol `void QQmlThread::postMethodToThread<QQmlDataBlob*, QQmlDataBlob*, QQmlDataLoaderThread>(void (QQmlDataLoaderThread::)(QQmlDataBlob), QQmlDataBlob* const&)' isn't defined

这个错误,查了官方的资料得知 Bug with GCC versions < 4.4.x,感觉瞬间凉凉~ 只好换成了 4.5.1 的工具链。

后续实验见本分类下的其它文档。

有什么问题欢迎探讨,需要资源的可以留言。^_^

猜你喜欢

转载自www.cnblogs.com/GyForever1004/p/8955665.html