下载

首先下载Qt everywhere,当前的版本是4.7.2,可以从nokia的网站上下载,也可以从git服务器上下载。考虑到文件有200M 以上的大小,下载速率低于25kBPS的,需要考虑从什么地方复制一份,否则需要等待较长时间才能下载下来。我是在家里下载这个文件的,所以开始编译已经是第二天了。考虑提升员工效率的话,需要预先预备好这些下载文件,或者增加接入带宽。

解压

第一步下载的文件是一个tar包,所以需要解压,通常解压需要在unix/Linux环境下进行,如果只是看代码,windows环境下的msys和cygwin环境也是可以顺利进行解压的,但直接不推荐直接用winrar解压,有时会发现某些文件重名了,会一时不知道该用哪个替换哪个。解压命令是tar -xvzf qt-everywhere-opensource-4.7.2.tar.gz。考虑到当前的PC速度普遍不差,很快解压就会完成了,如果解压超过5分钟没有完成,强烈建议考虑升级机器或检查虚拟机配置是否有问题,因为编译比解压的耗时要多许多倍。

编译

目标平台是一个MIPS架构的平台,我采用如下的configure

cd qt-everywehere-opensource-src-4.7.2
./configure -embedded mips -xplatform qws/linux-mips-g++ -little-endian -qt-gfx-linuxfb -no-opengl -no-multimedia -no-qt3support -no-script no-scripttools -no-audio-backend -no-openssl -no-sql-sqlite -no-largefile

configure开始时会交互确认采用opensource版本license过程,其后过程不需要干预。这个configure过程比较长,看起来configure编译产生了一些工具,预备后继工作的进行。

由于MIPS架构在Qt移植中属于2nd tier,所以支持的并不太好,所以需要在configure结束后,手动进行一些修改。修改的文件在mkspecs/qws/linux-mips-g++/目录下,名为qmake.conf,打开这个文件,发现一些问题,主要是编译器名称和CFLAGS,我使用的编译器配置如下:
QMAKE_CC = mips-linux-gnu-gcc
QMAKE_CXX = mips-linux-gnu-g++
QMAKE_CFLAGS += -EL -mips32r2 -msoft-float
QMAKE_CXXFLAGS += -EL -mips32r2 -msoft-float
QMAKE_LINK = mips-linux-gnu-g++ -EL -mips32r2 -msoft-float -lrt
QMAKE_LINK_SHLIB = mips-linux-gnu-g++ -EL -mips32r2 -msoft-float -lrt

QMAKE_AR = mips-linux-gnu-ar cqs
QMAKE_OBJCOPY = mips-linux-gnu-objcopy
QMAKE_STRIP = mips-linux-gnu-strip

编译相当耗时,(命令是qmake,)特别是编译时包含了demo和sample部分。不过考虑到需要用这些demo和sample在目标平台上跑出效果来,就继续等待吧。既然需要把Qt在嵌入式平台上运行,编译的等待期恰好可以读读文档什么的。在一台E5200的PC的ubuntu虚拟机上编译,耗时非常之久,我违法了公司规定,昨晚下班时让它继续编译,今天早晨来检查,看到编译已经完成了。

编译后生成了一堆的文件,包括很多.so库文件,将这些lib下的文件复制到目标平台上,Qt就基本上可以开始运行了。

问题

1.缺少libQtxxxx.so
解答:在LD_LIBRARY_PATH中增加libQtxxxx所在路径。

2.Cannot create semaphore on ‘/tmp/qtembedd…
解答:请检查kernel编译时是否enable了system V IPC。Qt窗口系统依赖于此IPC方式。

3.缺少libstdc++.so, libz.so等
解答:请将交叉编译器提供的目标平台动态库复制到目标平台上,并在LD_LIBRARY_PATH中描述。

4.framebuffer sample不工作
解答:检查平台视频输出接线,检查framebuffer驱动是否正常初始化。

5.鼠标不work
解答:export QWS_MOUSE_PROTO=IntelliMouse:/dev/mouse0

6.browser无法访问网页
解答:
-检查平台的ip地址ifconfig eth0
-检查平台的路由表route add default gw
-检查平台的dns设置/etc/resolv.conf,nameserver 8.8.8.8

至此,Qt版本已可以在MIPS Linux上运行,用它的browser demo也可以工作,只是性能不佳,下面应该属于优化工作了,暂不在本文描述范围。

总结

Qt平台的可移植性还是很不错的,在遇到的问题中,最难解的是问题2,即所谓Cannot create semaphore的问题,从今天上午遇到开始,不停的搜索Google,但是很少有文章说到点子上,许多论坛上有人提问,时间范围从2005年到2011年,但是很少看到最终解决的方法,所以在此文中稍作强调。

另外,browser的性能不敢恭维,qt 4.7.2是今年三月发布的,编译出来的性能甚至不如同平台上运行Android浏览器的效果,有些让人觉得疑惑,评测时,两者均没有打开2D加速。

https://d4linux.wordpress.com/2011/03/29/see_qt_run_on_mips_linux/

让Qt在MIPS Linux上运行 good的更多相关文章

  1. 【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目

    目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 ASP.Net Core 给我们带来的最大的亮点就是跨平台,我在我电脑(win7)上用虚拟机建了个 CentOS7 ,来演示下 ...

  2. 不装mono,你的.NET程序照样可以在Linux上运行!

    让.NET应用程序在linux上运行,目前通用的做法就是在Linux上安装mono,然后通过”mono your.exe“命令运行这个程序. 这种运行.net程序的办法有两个弱点,一个是需要客户机安装 ...

  3. Wine——在Linux上运行Windows软件

    官网:https://www.winehq.org/ 参考: wikipedia 教你使用Wine在Linux上运行Windows软件 如何安装和使用Wine,以便在Linux上运行Windows应用 ...

  4. 在Linux上运行C#

    众所周知,C#是Microsoft推出的.NET语言,只能在.NET平台上运行,例如Win 9x.ME.NT.2000.XP和Win CE之类的操作系统.但是,现在却有了一个叫做Mono的项目,它的目 ...

  5. 发布项目到 Linux 上运行 Core 项目

    发布项目到 Linux 上运行 Core 项目 目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 ASP.Net Core 给我们带来的最大的亮点就是跨平台,我在我电脑(win ...

  6. Docker在Linux上运行NetCore系列(一)配置运行DotNetCore控制台

    转发请注明此文章作者与路径,请尊重原著,违者必究. 系列文章:https://www.cnblogs.com/alunchen/p/10121379.html 本篇文章操作系统信息 Linux:ubu ...

  7. jmeter操作数据库,分布式,在Linux上运行

    jmeter操作数据库: 1.在测试计划中导入数据库jar包 2.添加链接数据库信息 3.mysql:jdc:mysql://192.168.1.116:3307/bugfree?allowMulti ...

  8. .netcore 在linux 上运行 Helllo World 例子

    要想在linux上运行netcore ,需要在linux 安装netcore SKD 下面分两步完成, 首先我的操作系统是 Ubuntu 14.04 ,不同版本可以参考 官网给出的连接 https:/ ...

  9. 开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs

    原文:开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs 快速入门:使用 Docker ...

随机推荐

  1. 【9102】&&【a102】求a/b的高精度值

    Time Limit: 10 second Memory Limit: 2 MB 问题描述 计算a/b的精度值,设a,b以一般整数输入,计算结果精确到小数后20位(结果四舍五入). Input 文件输 ...

  2. Android四个基本组件(2)之Service 服务与Content Provider内容提供商

    一.Service 维修: 一Service 这是一个长期的生命周期,没有真正的用户界面程序,它可以被用于开发如监视类别节目. 表中播放歌曲的媒体播放器.在一个媒体播放器的应用中.应该会有多个acti ...

  3. 到底有多少种智能指针(smart pointer)

    最近Qt的blog总结了到底有多少种smart pointer, 下面是一个简要的介绍: 1.   QPointer :提供对指针的保护,当一个指针被删除以后,再使用不会造成野指针或者指针溢出.比如 ...

  4. 利用WPF建立自己的3d gis软件(非axhost方式)(五)在鼠标点击的位置增加UI

    原文:利用WPF建立自己的3d gis软件(非axhost方式)(五)在鼠标点击的位置增加UI 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bP ...

  5. Mint UI 使用指南

    上来直接在webpack里将Mint UI引入项目,发现各种问题.饿了么组件库文档太坑了,好多地方写错,有些该说明的地方没说,比如例子里单文件.vue组件里用的类post-css处理器,我一直使用SA ...

  6. IIS执行原理

    IIS执行原理   服务器的监听(IIS6.0+版本) 当请求到达服务器时,请求最终会到达TCPIP.SYS驱动程序,TCPIP.SYS将请求转发给HTTP.SYS网络驱动程序的请求队列中(可以理解为 ...

  7. 获取当前电脑的cpu使用率、内存使用率

    https://www.cnblogs.com/Chary/p/7771365.html http://www.cnblogs.com/zl1991/p/4679461.html 要关注几个类 Per ...

  8. poj 3390 Print Words in Lines 动态规划

    意甲冠军: 给n每行长度和字符可放置最大数量字m,每一行产生值至(m-x)^2,x是一个字符上线人数(包含空话之间格).为了让所有的完成,产生的话值最小和. 分析: 动态规划非常重要的就是状态的定义, ...

  9. Cocos2d-x移植WP8时间CCScrollView问题

    cocos2d-x 2.2中的CCScrollView和CCTableView存在bug.导致区域裁剪错误 我是这样解决的. 在CCEGLView::setScissorInPoints里.依据不同旋 ...

  10. Raw-OS备用事件源代码分析

    作为分析的内核版本2014-04-15,基于1.05正式版,blogs我们会跟上的内核开发进度的最新版本,如果出现源代码的目光"???"的话.没有深究的部分是理解. Raw-OS官 ...