Windows平台交叉编译Arm Linux平台的QT5.7库
1、准备交叉编译环境
环境说明:Windows 7 64位
此过程需要:
(1)Qt库开源代码,我使用的是5.7.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)。
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。
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中。
1.3、安装Python
到Python官网 https://www.python.org/downloads/下载Python2.7以上版本,如python-3.5.2.exe。安装完成后将安装目录里的bin目录路径添加到windows环境变量的PATH中。
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中。
1.5、安装交叉编译器
之前使用的Codesourcery公司的交叉编译器版本较低(arm-2014.05-29-arm-none-linux-gnueabi.exe,arm-none-linux-gnueabi,gcc 4.8.3),支持c++11不完全,而且编译好的程序需要联带几个基础的依赖库一起打包,麻烦了点。
现使用linaro公司的交叉编译器,可到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工具编译后的程序不需要联带依赖库一起打包。
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..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开始编译。
2.4、编译之make install
编译完成后,执行mingw32-make install命令开始安装,将会安装把之前-prefix指定的目录中。
注:qmake默认都是以-prefix指定的绝对目录去搜索头文件和库文件,所以qmake本身可以移动变更路径;但如果是整个Qt库目录路径都变更,则需要在qmake.exe程序所在目录增加一个qt.conf配置文件,文件内容为:
[Paths]
Prefix=..
即用配置文件qt.conf里的Prefix项去更改qmake搜索的库路径,上面是一般情况情况即整个库目录被移动后时的配置方式,即以父目录为库路径。
3、安装与配置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库。
也可以下载windows平台的Qt整包qt-opensource-windows-x86-mingw530-5.7.0.exe来安装,里面包含有Qt Creator、windows-x86 Qt库、mingw5.3.0。所以如果使用这个安装包,之前可以不用单独安装MinGW。安装此包后可以开发本地的Qt程序,经过如下的配置后还可以开发ARM linux程序。
不论使用上述哪个包安装,都需要按如下配置好上面编译好的Qt库才能编译ARM linux平台的Qt程序。
启动运行Qt Creator,菜单工具(Tools)->选项(options),打开设置对话框,切换到构建与运行(build and run)项。先添加交叉编译器,点击添加,找到交叉编译器路径,取个名称,如下图。

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

如果需要用到调试功能,设置调试器Debugger与上类似。
设置Qt版本,点击添加,找到Qt库安装目录bin里的qmake.exe,取个名后添加,如下图

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

至此,可以开发ARM linux上的Qt程序了。
Windows平台交叉编译Arm Linux平台的QT5.7库的更多相关文章
- 在windows系统下打包linux平台运行的go程序
在windows系统下打包linux平台运行的go程序 1.先在main.go下打包成.exe可执行程序测试代码是否正确 //cd到main.go目录 go build //打包命令 如果打包成功则表 ...
- Linux中使用Vim快速更换文档中Windows换行符为Linux平台
一.简述 平时我们把Windows编写好的sh文件放在linux上跑时,经常出现换行符的问题.快速切换的解决方法如下: 二.解决 vim test.sh :set ff? 如果出现fileforma= ...
- ubuntu 交叉编译arm linux 内核小例子
下载arm-linux-gcc 4.2.3http://code.google.com/p/princess-alist/downloads/detail?name=arm-linux-gcc-4.3 ...
- Golang 在 Mac、Linux、Windows 下交叉编译
Golang 支持在一个平台下生成另一个平台可执行程序的交叉编译功能. Mac下编译Linux, Windows平台的64位可执行程序: CGO_ENABLED= GOOS=linux GOARCH= ...
- golang 2行代码在基于arm linux的树莓派、orangepi上运行http web服务
go语言(golang)简化了跨平台交叉编译步骤,支持在windows系统下交叉编译基于arm+linux平台的应用,运行时无需其它依赖库.以下以一个简单的http server为例,先上源码: ** ...
- Windows及Linux平台下的计时函数总结
本文对Windows及Linux平台下常用的计时函数进行总结,包括精度为秒.毫秒.微秒三种精度的各种函数.比如Window平台下特有的Windows API函数GetTickCount().timeG ...
- Thrift在Windows及Linux平台下的安装和使用示例
本文章也同时发表在个人博客Thrift在Windows及Linux平台下的安装和使用示例上. thrift介绍 Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的R ...
- 【NodeJs】Ctrl+C在Linux平台和Windows平台下的TCP连接中的不同表现
Linux平台:CentOS release 6.5 (Final) Windows平台:Windows 7 旗舰版 服务器端代码如下: var net = require('net'); var s ...
- 转:一个跨WINDOWS LINUX平台的线程类
来源:http://blog.csdn.net/dengxu11/article/details/7232681 继Windows下实现一个CThread封装类之后,这里我再实现一个跨WINDOWS ...
随机推荐
- 使用光盘搭建本地yum源
刚装好的系统,想安装一些常用软件和一些包组的时候,就可以使用安装光盘搭建本地yum 第一步:挂载安装光盘 mount /dev/cdrom /mnt 第二步:编辑repo yum源文件 [root@l ...
- CentOS 6.5 rsync+inotify实现数据实时同步备份
CentOS 6.5 rsync+inotify实现数据实时同步备份 rsync remote sync 远程同步,同步是把数据从缓冲区同步到磁盘上去的.数据在内存缓存区完成之后还没有写入到磁盘 ...
- mongodb数据库安装及常见操作
客户端和服务端的安装 # rpm -ivh mongo-10gen-2.4.6-mongodb_1.x86_64.rpm mongo-10gen-server-2.4.6-mongodb_1.x86_ ...
- Android通讯:通话
Android通讯之通话功能的实现: 在Android中,android.telephony.TelephonyManager对象是开发者获取当前通话网络相关信息的窗口,通过TelephonyMana ...
- 04-Bootstrap的插件
1.下拉菜单 代码如下: <div class="dropdown"> <button class="btn btn-default dropdown- ...
- 解执行maven项目出现 SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”. error
最近再弄maven项目,运行起来没有问题,但是Console控制台会报错,比如说如下的问题异常提示: 由此我们可以看出,报出错误的地方主要是slf4j的jar包,而故障码中“Failed to loa ...
- 论文笔记 SSD: Single Shot MultiBox Detector
转载自:https://zhuanlan.zhihu.com/p/33544892 前言 目标检测近年来已经取得了很重要的进展,主流的算法主要分为两个类型(参考RefineDet):(1)two-st ...
- 欧拉函数,打表求欧拉函数poj3090
欧拉函数 φ(n) 定义:[1,N]中与N互质的数的个数 //互质与欧拉函数 /* 求欧拉函数 按欧拉函数计算公式,只要分解质因数即可 */ int phi(int n){ int ans=n; ;i ...
- vue组件库(二):基于verdaccio工具npm私服搭建
大纲 搭建npm私服的必要性 搭建npm私服的主要操作 一.搭建npm私服的必要性 二.搭建npm私服的主要操作 1.环境准备 确保服务器已安装以下包: node(必须) 安装了nodenpm,如果想 ...
- POJ 2395 Out of Hay (Kruskal)
题意:从待选的路里面选出若干将所有点连通,求选出的边里最长边的最小值. 算法:要使得树的最长边最小,那么每次确定的边都应是待选边里最小的,即最小生成树.对应Kruskal算法. #include &l ...