我的工作环境
- 主机平台:Ubuntu 16.04 LTS(x64)
- 目标平台:ARM40-A5D3
- Qt版本:qt-everywhere-opensource-src-4.8.7.tar.gz
- tslib github
- ARM-GCC编译工具链:gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi.tar.xz
配置工具链
$ 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/
$ cd ~
$ vim .bashrc
在.bashrc的末尾添加文本
export PATH=$PATH:/opt/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi/bin/
$ arm-linux-gnueabi-gcc -v #查看ARM-GCC版本
Thread model: posix
gcc version 4.9.4 (Linaro GCC 4.9-2017.01)
配置tslib
- 下载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=/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
$ make&&sudo make install
$ ls /opt/tslib/
>>>>bin etc include lib share
编译安装Qt4.8.7
解压qt源码包到指定目录,并编辑qmake.conf。
$ 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 \ 不显示鼠标
-dbus \D-Bus库选项,需要预先编译D-Bus
$ sudo mkdir /opt/qte4.8.7
$ ./configure \
--prefix=/opt/qte4.8.7 \
-opensource \
-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 \
-nomake docs \
-nomake demos \
-no-nis \
-no-cups \
-no-iconv \
-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 \
-dbus -dbus-linked \
-I/opt/dbus/include \
-I/opt/dbus/include/dbus-1.0/dbus \
-L/opt/dbus/lib -ldbus-1 -lpthread -lrt \
-force-pkg-config \
-I/opt/tslib/include \
-L/opt/tslib/lib \
-confirm-license
$ make -j 4
$ sudo make install
- 报错
1、 Makefile:742: recipe for target ‘sub-tools-make_default-ordered’ failed
make: *** [sub-tools-make_default-ordered] Error 2
解决方案:configure项添加 -nomake tools 或者直接忽视之
2、 Makefile:201: recipe for target ‘sub-corelib-make_default-ordered’ failed
make: *** [sub-corelib-make_default-ordered] Error 2
一般都是编译器路径有问题导致的,检查qmake.conf文件
3、The tslib functionality test failed!
You might need to modify the include and library search paths by editing QMAKE_INCDIR and QMAKE_LIBDIR in
没找到编译器
4、qdbusintegrator.cpp:(.text+0x4308):对‘dbus_connection_can_send_type’未定义的引用
qdbusintegrator.cpp:(.text+0x4984):对‘dbus_connection_can_send_type’未定义的引用
collect2: error: ld returned 1 exit status
Makefile:180: recipe for target ‘…/…/lib/libQtDBus.so.4.8.7’ failed
在当前命令行下,输入下面的指令
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/dbus/lib/pkgconfig
- 查看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
未完,待续QtDbus。。。