https://blog.csdn.net/jzzy_hony/article/details/79181605
准备
主机平台: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
交叉编译工具链
下载gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi.tar.xz
gcc.png
安装ARM-GCC编译工具链
$ 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/
1
2
3
编辑.bashrc文件
$ cd ~
$ vim .bashrc
1
2
在.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
1
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
1
2
正克隆到 ‘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
1
2
3
4
5
6
7
8
9
10
编译报错
/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
1
2
3
4
5
查看tslib
$ ls /opt/tslib/
1
bin etc include lib share
编译Qt4.8.7
下载qt-everywhere-opensource-src-4.8.7.tar.gz
qt4.8.7
编辑qmake.conf
$ 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
1
2
3
4
#
# 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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
编译安装Qt
$ sudo mkdir /opt/qte4.8.7
$ make -j 4
$ sudo make install
1
2
3
编译报错
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
1
2
QMake version 2.01a
Using Qt version 4.8.7 in /opt/qte4.8.7/lib
至此,Qt4.8.7交叉编译完成。
参考引用
米尔技术社区
veryARM
Qt for Embedded Linux Environment Variables
————————————————
版权声明:本文为CSDN博主「jzzy_hony」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jzzy_hony/java/article/details/79181605