交叉编译Arm Linux平台的QT5库

1、准备交叉编译环境

环境说明:Windows10 64位

此过程需要:

(1)Qt库开源代码,我使用的是5.13.0版本;

(2)Perl语言环境5.12版本以上;

(3)Python语言环境 2.7 版本以上;

(4)Windows平台上的MinGW开发工具集(内含本地编译器gcc、g++ 4.9以上版本,支持c++11);

(5)Windows平台上的交叉编译器arm-linux-gnueabihf(gcc、g++4.9以上版本,支持c++11)。

注:Qt Creator 完全安装的情况 (4)可以省略

1.1、下载Qt库源代码

到Qt官网官网https://www.qt.io/download-open-source/#section-2下载qt-everywhere-opensource-src-5.7.0.zip或者qt-everywhere-opensource-src-5.7.0.tar.gz。

本次使用:qt-everywhere-src-5.13.0.zip

1.2、安装Perl

到Perl官网https://www.perl.org/get.html下载ActivePerl 5.12以上版本,如ActivePerl-5.24.0.2400-MSWin32-x86-64int-300560.exe。安装完成后将安装目录里的bin目录路径添加到windows环境变量的PATH中

本次使用:ActivePerl-5.28.msi

1.3、安装Python

到Python官网 https://www.python.org/downloads/

下载Python2.7以上版本,如python-3.5.2.exe。安装完成后将安装目录里的bin目录路径添加到windows环境变量的PATH中。

本次使用:python-3.6.8-amd64.exe

1.4、MinGW开发工具集

MinGW工具集内含编译器工具gcc、g++等,需要此工具集来编译Qt的qmake等开发工具,因为qmake这些开发工具是在本地windows上运行的。要求4.9以上版本的gcc、g++,4.8以上就已经支持c++11。

32位系统可以到https://sourceforge.net/projects/mingw/下载mingw-get-setup.exe后进行在线安装;64位系统到https://sourceforge.net/projects/mingw-w64/下载mingw-w64-install.exe后进行在线安装。安装完成后将其bin目录添加到环境变量PATH中。

注意:Qt Creator 完全安装的情况 此步骤省略,到QT安装目录虾将其bin目录添加到环境变量PATH中。

例如:D:\ProgramFile\Qt5.13.2\Tools\mingw730_64\bin

本次使用:因为先完全安装了Qt Creator 所以使用自带的

1.5、安装交叉编译器

可到http://releases.linaro.org/14.07/components/toolchain/binaries/下载gcc-linaro-arm-linux-gnueabihf-4.9-2014.07-20140726_win32.exe,安装完成后,将其bin目录添加到环境变量PATH中。arm-linux-gnueabihf工具编译后的程序不需要联带依赖库一起打包。

本次使用:gcc-linaro-6.5.0-2018.12-i686-mingw32_arm-linux-gnueabihf

2、交叉编译Qt库

2.1、编译前的处理

解压Qt源码到本地。用文本方式打开Qt源码目录里qtbase\mkspecs\linux-arm-gnueabi-g++\ qmake.conf配置文件,修改交叉编译器程序名相关的配置。

修改前:

修改后:

编译发现一个链接错误,查找其原因是有一个源文件没有被编译,挺奇怪的。解决办法是修改qtbase\src\corelib\kernel\kernel.pri文件,貌似qpoll.cpp编译条件没达到,改为强制编译。

修改前:

修改后:追加以下内容

2.2、编译之configure

打开cmd窗口,进入Qt源码目录,执行如下代码,然后输入y接受许可协议开始配置,等待配置完成。

configure.bat -release -opensource -prefix D:\Qt5.13.0_ARM_Linux -nomake tests -nomake examples -no-opengl -skip qtvirtualkeyboard -xplatform linux-arm-gnueabi-g++

注:命令中,

-release:编译release版本。

-opensource:表示开源许可;

-prefix:指定安装目录,根据自己喜好;安装后qmake程序默认就会根据这个目录路径去搜索头文件和库文件,

-nomake:表示不编译后面参数指定的模块;

-no-opengl:表示不编译OpenGL,这个我们用不着,也没有安装OpenGL环境,所以不编译,否则会出错;

–skip qtvirtualkeyboard:跳过qtvirtualkeyboard,没有相应库环境,不编译,否则编译和安装过程中可能会报错。

-xplatform linux-arm-gnueabi-g++:指定交叉编译器配置目录为linux-arm-gnueabi-g++,qmake会到qtbase\mkspecs\linux-arm-gnueabi-g++里读取qmake.conf文件,找到交叉编译工具来编译Qt动态库。

默认-shared:编译动态库

默认-platform:为win32-g++,即指定本地编译器配置目录,到qtbase\mkspecs\ win32-g++目录里读取qmake.conf文件,找到本地编译工具来编译qmake。

2.3、编译之make

Configure正常完成后,执行命令mingw32-make开始编译。

mingw32-make

2.4、编译之make install

编译完成后,执行mingw32-make install命令开始安装,将会安装把之前-prefix指定的目录中。

mingw32-make install

注:qmake默认都是以-prefix指定的绝对目录去搜索头文件和库文件,所以qmake本身可以移动变更路径;但如果是整个Qt库目录路径都变更,则需要在qmake.exe程序所在目录增加一个qt.conf配置文件,文件内容为:

点击查看代码
[Paths]
Prefix=..

即用配置文件qt.conf里的Prefix项去更改qmake搜索的库路径,上面是一般情况情况即整个库目录被移动后时的配置方式,即以父目录为库路径。

3、安装与配置Qt Creator

3.1安装Qt Creator

如果刚开始安装过就省略此步骤

到Qt官网官网https://www.qt.io/download-open-source/#section-2下载独立的Qt Creator程序安装包qt-creator-opensource-windows-x86-4.1.0.exe来安装。Qt Creator安装程序本身不大,因为不含有qmake等工具,也不含有Qt库。

3.2配置Qt Creator

启动运行Qt Creator,菜单工具(Tools)->选项(options),打开设置对话框,切换到【Kits】如果是低版本可能是【构建与运行(build and run)】项。先添加交叉编译器[添加-->GCC-->C++],点击添加,找到交叉编译器路径,取个名称,如下图。

注意:这里是在1.5安装后的目录下

设置make路径:点击Add,找到minGW安装目录bin里的mingw32-make.exe,取个名后添加,如下图。

注意:这里是Qt creator 安装目录下或1.4安装后的目录下

设置Qt版本,点击添加,找到Qt库安装目录bin里的qmake.exe,取个名后添加,如下图

注意:这里是2.3~2.4编译出来的目录

最后整合整套工具,设置构建套件,如下图,点击添加,取个名称,选择之前设置好的交叉编译器和Qt版本,点击Apply。最终点击”设置为默认”将该套方案作为当前编译方案。

注意:这里是3.2做成的编译器

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

如果交叉编译的时候出make无法启动的错!请确保选择了make路径

点击选中要编译的工程-->左侧点击【项目】出现以下界面,请确保绿框中内容 如下图:

========================================================================================================================

到此结束!!!

ARM-linux的Windows交叉编译环境搭建的更多相关文章

  1. Ubuntu系统下arm-linux-gcc交叉编译环境搭建过程

    搭建所需环境Linux版本:Ubuntu 14.10 交叉编译器版本:arm-linux-gcc-4.4.3资源链接 何为交叉编译环境搭建交叉编译环境,即安装.配置交叉编译工具链.在Ubuntu环境下 ...

  2. YA157C交叉编译环境搭建

    目录 1.开发板简介 3.主机搭建交叉编译环境 4.编译第一个ARM Linux程序--Hello World 5.在开发板上运行Hello World程序 6.ssh登录开发板 7.注意 8.she ...

  3. Exynos4412交叉编译环境搭建

    Exynos4412交叉编译环境搭建 交叉编译:在PC机(x86平台)上开发程序,在ARM板上运行,提高开发.编译速度. 环境: Tiny4412SDK1506开发板 需要软件: arm-linux- ...

  4. Redis的简单介绍及在Windows下环境搭建

    简单介绍 1,Redis是什么 最直接的还是看官方的定义吧. Redis is an open source (BSD licensed), in-memory data structure stor ...

  5. Unix/Linux环境C编程新手教程(12) openSUSECCPP以及Linux内核驱动开发环境搭建

    1. openSUSE是一款优秀的linux. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaXRjYXN0Y3Bw/font/5a6L5L2T/font ...

  6. Unix/Linux环境C编程入门教程(12) openSUSECCPP以及Linux内核驱动开发环境搭建

    1. openSUSE是一款优秀的linux. 2.选择默认虚拟机 3.选择稍后安装操作系统 4.选择linux  opensuse 5. 选择默认虚拟机名称 6.设置处理器为双核. 7.内存设置为2 ...

  7. 【课程分享】深入浅出嵌入式linux系统移植开发 (环境搭建、uboot的移植、嵌入式内核的配置与编译)

    深入浅出嵌入式linux系统移植开发 (环境搭建.uboot的移植.嵌入式内核的配置与编译) 亲爱的网友,我这里有套课程想和大家分享,假设对这个课程有兴趣的,能够加我的QQ2059055336和我联系 ...

  8. 学习Linux(一)环境搭建

    零基础学习Linux(一)环境搭建 从本文开始我会为大家介绍一下linux环境下详细的集群环境安装.配置.部署到实例演示的整个过程.在此过程中会给大家详细介绍一下Linux的操作技巧和一些工具的使用. ...

  9. Windows GTK+ 环境搭建(详解)

    来源:http://blog.sina.com.cn/s/blog_a6fb6cc901017ygy.html Windows GTK+ 环境搭建 最近要做界面的一些东西,但是对微软提供的类库MFC不 ...

  10. Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例【附详细代码】

    http://blog.csdn.net/xiefu5hh/article/details/51707529 Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例[附 ...

随机推荐

  1. pgsql 自定义函数

    CREATE OR REPLACE FUNCTION test1(id INTEGER,id1 INTEGER) RETURNS INTEGER LANGUAGE plpgsql AS $$ decl ...

  2. uniapp 图片文件流

    uni.request({ url: '*****', //仅为示例,并非真实接口地址. method: 'GET', responseType: 'arraybuffer', data: {}, h ...

  3. 单个表空间文件个数达到上限 ORA-01686

    # 问题概述因在oracle数据库表空间管理中的时候 报 ORA-01686: max # files (1023) reached for the tablespace GPRS SQL> a ...

  4. JS学习-Canvas-Transformations变换

    Canvas -Transformations变换 save() 保存画布(canvas)的所有状态 restore() 是 Canvas 2D API 通过在绘图状态栈中弹出顶端的状态,将 canv ...

  5. 树莓派4B安装Gogs

    https://www.labno3.com/2021/01/28/how-to-install-gogs-on-the-raspberry-pi/ https://gogs.io/docs/inst ...

  6. Oracle 临时表空间暴满的原因与解决方法

    Oracle临时表空间主要用来做查询和存放一些缓冲区数据.临时表空间消耗的主要原因是需要对查询的中间结果进行排序. 重启数据库可以释放临时表空间,如果不能重启实例,而一直保持问题sql语句的执行,te ...

  7. selenium浏览器参数设置详解——转

    所有参数 https://peter.sh/experiments/chromium-command-line-switches/ 参数使用介绍 https://blog.csdn.net/XianZ ...

  8. 【北邮人论坛帖子备份】【FAQ】给今年国企求职学弟学妹的一点建议

    目录 主要内容 补充--[心得][校招]面向国企秋招的一些体会 补充--[心得]回馈论坛,某toca的小弟金融类央企秋招过程中的一点点 主要内容 时间:Fri Feb 19 23:00:33 2021 ...

  9. CCIE DC Multicast Part 1.

    Hi Guys! As we all wait anxiously for the training vendors to release Rack Rentals (Come on guys! At ...

  10. 如何保证RabbitMQ不会被重复消费?

    为什么会有重复消费? 做一个标志! 在将生产者写消息的时候,对数据做一个唯一标识.消费者在消费消息时,根据这个唯一标识做判断,如果这个唯一标识被消费过了,那么就 不消费了,如果判断结果是没有被消费过, ...