ARM40 Ubuntu交叉编译Qt4.8.7

准备
  • 主机平台:Ubuntu 16.04 LTS(x64)
  • 目标平台:ARM40-A5D3
  • Qt版本:Qt4.8.7
  • tslib github
  • ARM-GCC编译工具链:gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi
交叉编译工具链
$ sudo xz -d gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi.tar.xz
$ ls
$ sudo tar xvf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi.tar -C /opt/
  • 编辑.bashrc文件
$ cd ~
$ vim .bashrc
  • 在.bashrc的末尾添加下面的文本
    export PATH=$PATH:/opt/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi/bin/
  • 查看ARM-GCC版本
$ arm-linux-gnueabi-gcc -v

Thread model: posix
gcc version 4.9.4 (Linaro GCC 4.9-2017.01)

安装tslib
  • 使用浏览器下载tslib
    下载tslib


  • 使用git下载tslib

$ sudo apt-get install git
$ git clone https://github.com/kergoth/tslib.git

正克隆到 ‘tslib’…
remote: Counting objects: 5089, done.
remote: Total 5089 (delta 0), reused 0 (delta 0), pack-reused 5089
接收对象中: 100% (5089/5089), 2.39 MiB | 429.00 KiB/s, 完成.
处理 delta 中: 100% (3505/3505), 完成.
检查连接… 完成。

  • 编译tslib
$ sudo apt-get install automake libtool
$ sudo mkdir /opt/tslib
$ cd tslib
$ ./autogen.sh
$ ./configure CC=arm-linux-gnueabi-gcc \
               CXX=arm-linux-gnueabi-g++ \
               --prefix=/opt/tslib \
               --host=arm-linux-gnueabi \
               ac_cv_func_malloc_0_nonnull=yes
$ make&&sudo make install
  • 编译报错
    /home/jonny/tslib/libtool: line 10540: arm-linux-gnueabi-gcc: command not found
    libtool: error: error: relink ‘linear.la’ with the above command before installing it
    Makefile:755: recipe for target ‘install-pluginexecLTLIBRARIES’ failed
    make2: * [install-pluginexecLTLIBRARIES] Error 1
    make2: Leaving directory ‘/home/jonny/tslib/plugins’
    Makefile:1021: recipe for target ‘install-am’ failed
    make1: * [install-am] Error 2
    make1: Leaving directory ‘/home/jonny/tslib/plugins’
    Makefile:483: recipe for target ‘install-recursive’ failed
    make: * [install-recursive] Error 1
  • 解决方案
    原因:sudo命令使用的是root的环境变量,sudo就找不到ARM-GCC了
    解决:添加ARM-GCC的绝对路径就好了
$ ./configure CC=/opt/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-gcc \
            CXX=/opt/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-g++ \
            --prefix=/opt/tslib \
            --host=arm-linux-gnueabi \
            ac_cv_func_malloc_0_nonnull=yes
  • 查看tslib
$ ls /opt/tslib/

bin etc include lib share

编译Qt4.8.7
$ cd ~
$ tar xvf qt-everywhere-opensource-src-4.8.7.tar.gz ./
$ cd qt-everywhere-opensource-src-4.8.7/
$ vim  ./mkspecs/qws/linux-arm-gnueabi-g++/qmake.conf

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

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

# modifications to g++.conf
QMAKE_CC                = /opt/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-gcc -lts
QMAKE_CXX               = /opt/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-g++ -lts
QMAKE_LINK              = /opt/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-g++ -lts
QMAKE_LINK_SHLIB        = /opt/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-g++ -lts

# modifications to linux.conf
QMAKE_AR                = /opt/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-ar cqs
QMAKE_OBJCOPY           = /opt/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-objcopy
QMAKE_STRIP             = /opt/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-strip

load(qt_config)
  • configure编译配置
    -debug-and-release \ Qt调试;
    -shared \ 动态编译;
    -static \ 静态编译;
    -make docs \ 文档帮助;
    -DQT_NO_QWS_CURSOR \ 不显示鼠标
$ ./configure  \
            --prefix=/opt/qte4.8.7 \
            -opensource \
            -debug-and-release \
            -shared \
            -Declarative \
            -fast \
            -no-largefile \
            -qt-sql-sqlite \
            -qt3support \
            -exceptions \
            -xmlpatterns \
            -script \
            -scripttools \
            -no-glib \
            -no-phonon \
            -svg \
            -no-webkit \
            -qt-zlib \
            -qt-libtiff \
            -qt-libpng \
            -qt-libjpeg \
            -make libs \
            -nomake tools \
            -nomake examples \
            -make docs \
            -nomake demos \
            -no-nis \
            -no-cups \
            -no-iconv \
            -no-dbus \
            -xplatform qws/linux-arm-gnueabi-g++ \
            -embedded arm \
            -little-endian \
            -qt-freetype \
            -depths 16,24,32 \
            -qt-gfx-linuxfb \
            -no-gfx-transformed \
            -no-gfx-multiscreen \
            -no-gfx-vnc \
            -no-gfx-qvfb \
            -qt-kbd-linuxinput \
            -qt-kbd-tty  \
            -no-kbd-qvfb \
            -armfpa \
            -optimized-qmake  \
            -no-mouse-qvfb \
            -qt-mouse-linuxtp \
            -qt-mouse-tslib \
            -DQT_QLOCALE_USES_FCVT \
            -DQT_NO_QWS_CURSOR \
            -pch \
            -I/opt/tslib/include \
            -L/opt/tslib/lib  \
            -confirm-license     
  • 编译安装Qt
$ sudo mkdir /opt/qte4.8.7
$ make -j 4
$ sudo make install
  • 编译报错

    make3: Leaving directory ‘/home/jonny/qt-everywhere-opensource-src-4.8.7/tools/linguist/linguist’
    make2: Leaving directory ‘/home/jonny/qt-everywhere-opensource-src-4.8.7/tools/linguist’
    Makefile:339: recipe for target ‘sub-linguist-make_default-ordered’ failed
    make1: * [sub-linguist-make_default-ordered] Error 2
    make1: Leaving directory ‘/home/jonny/qt-everywhere-opensource-src-4.8.7/tools’
    Makefile:742: recipe for target ‘sub-tools-make_default-ordered’ failed
    make: * [sub-tools-make_default-ordered] Error 2
    — 解决方案:configure项添加 -nomake tools 或者直接忽视之
    Makefile:1054: recipe for target ‘.moc/release-shared-emb-arm/moc_qabstractanimation.cpp’ failed
    make1: * [.moc/release-shared-emb-arm/moc_qabstractanimation.cpp] Error 2
    make1: * 正在等待未完成的任务….
    Makefile:1314: recipe for target ‘.moc/release-shared-emb-arm/moc_qvariantanimation.cpp’ failed
    make1: * [.moc/release-shared-emb-arm/moc_qvariantanimation.cpp] Error 2
    Makefile:1433: recipe for target ‘.moc/release-shared-emb-arm/moc_qpropertyanimation.cpp’ failed
    make1: * [.moc/release-shared-emb-arm/moc_qpropertyanimation.cpp] Error 2
    make1: Leaving directory ‘/home/jonny/qt-everywhere-opensource-src-4.8.7/src/corelib’
    Makefile:201: recipe for target ‘sub-corelib-make_default-ordered’ failed
    make: * [sub-corelib-make_default-ordered] Error 2

    解决方案:一般都是编译器路径有问题导致的,检查qmake.conf文件


  • 查看Qt版本

$ cd /opt/qte4.8.7/bin/
$ ./qmake -v

QMake version 2.01a
Using Qt version 4.8.7 in /opt/qte4.8.7/lib

至此,Qt4.8.7交叉编译完成。

参考引用
  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值