ARM40 Ubuntu交叉编译Qt4.8.7

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