在Linux环境交叉编译Qt5.5.0源码及编译示例
实验环境
交叉编译平台 (on VMware14.0,Win10)
交叉编译链 gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_linux
前提 得到交叉编译链以及下载Qt5.5.0的源码包
硬件 无
实验目的
在Linux上使用交叉编译链编译出Qt5.5的库以及qmake工具。
实验原理
根据Qt5.5.0源码包内的README文件,先安装好编译所需的库如X11,Xcb等

然后根据如下格式进行配置安装:

编译Qt库主要步骤:
1、下载并解压安装交叉编译链,设置环境变量;
2、下载并解压所需Qt源码包,得到源码;
3、下载编译所需的库;
4、更改qmake.conf文件中的编译链信息,与所用交叉编译链统一;
5、进行配置,得到MAKEFILE文件;
6、make make install;
7、设置qmake链接的库路径;
实验过程
1、已获得交叉编译链:

解压完其目录文件以及bin内命令如图:
2、设置环境变量并验证

(注:使用export PATH时只对本次终端起作用,若另开终端无此环境变量,若需永久则需在/etc/profile或/etc/.bash.bashc文件中export PATH)

显示编译链的版本相关信息,完成。
3、从Qt官网下载开源源码包,解压得文件如下:

3、安装相关的库

4、修改对应qmake.conf文件

根据交叉编译链修改(此处为了保险加了交叉编译链的绝对路径):

5、进行配置,主要配置版本(-release)、安装目录(-prefix+路径)、所使用的平台(-xplatform linux-arm-gnueabi-g++)、附加项等

回车后会显示询问
Yes 回车
打印相关信息

…

此时已生成MAKEFILE文件
6、make (可加参数多线程编译-j)
7、make install
8、到安装目录下:

9、./bin目录下

10、qmake -v打印版本信息以及基于的库目录

尝试交叉编译Qt工程
用qtcreater新建一个带ui的工程,用qmake编译,查询文件信息


发现错误,编译出来是x86-64的而非arm的,查询发现是qmake链接的库出现问题,默认安装后所链接到/usr/lib/x86_64-linux-gnu目录下的库,而交叉编译所需的库在安装目录下的lib里,所以需更改路径;
1、cd到/usr/lib/x86_64-linux-gnu/qtchooser
2、更改该目录下的qt5.conf文件,其默认是/usr/lib/x86_64-linux-gnu
改成安装目录下的lib目录

保存后重新qmake工程,生成MAKEFILE文件后执行make
qmake -v查看qt版本、库路径以及file untitled查看可执行文件信息如下

此时已正确显示版本信息以及成功交叉编译为ARM架构所需文件,完成。
网友评论