让Qt在MIPS Linux上运行 good
下载
首先下载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的更多相关文章
- 【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 ASP.Net Core 给我们带来的最大的亮点就是跨平台,我在我电脑(win7)上用虚拟机建了个 CentOS7 ,来演示下 ...
- 不装mono,你的.NET程序照样可以在Linux上运行!
让.NET应用程序在linux上运行,目前通用的做法就是在Linux上安装mono,然后通过”mono your.exe“命令运行这个程序. 这种运行.net程序的办法有两个弱点,一个是需要客户机安装 ...
- Wine——在Linux上运行Windows软件
官网:https://www.winehq.org/ 参考: wikipedia 教你使用Wine在Linux上运行Windows软件 如何安装和使用Wine,以便在Linux上运行Windows应用 ...
- 在Linux上运行C#
众所周知,C#是Microsoft推出的.NET语言,只能在.NET平台上运行,例如Win 9x.ME.NT.2000.XP和Win CE之类的操作系统.但是,现在却有了一个叫做Mono的项目,它的目 ...
- 发布项目到 Linux 上运行 Core 项目
发布项目到 Linux 上运行 Core 项目 目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 ASP.Net Core 给我们带来的最大的亮点就是跨平台,我在我电脑(win ...
- Docker在Linux上运行NetCore系列(一)配置运行DotNetCore控制台
转发请注明此文章作者与路径,请尊重原著,违者必究. 系列文章:https://www.cnblogs.com/alunchen/p/10121379.html 本篇文章操作系统信息 Linux:ubu ...
- jmeter操作数据库,分布式,在Linux上运行
jmeter操作数据库: 1.在测试计划中导入数据库jar包 2.添加链接数据库信息 3.mysql:jdc:mysql://192.168.1.116:3307/bugfree?allowMulti ...
- .netcore 在linux 上运行 Helllo World 例子
要想在linux上运行netcore ,需要在linux 安装netcore SKD 下面分两步完成, 首先我的操作系统是 Ubuntu 14.04 ,不同版本可以参考 官网给出的连接 https:/ ...
- 开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs
原文:开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs 快速入门:使用 Docker ...
随机推荐
- springMvc中restful风格的api路径中把小数点当参数,SpringMvc中url有小数点
在springMvc web项目中restful风格的api路径中有小数点会被过滤后台拿不到最后一个小数点的问题, 有两种解决方案: 1:在api路径中加入:.+ @RequestMapping(&q ...
- 使用Java Service Wrapper将java程序作为linux服务并且开机自动启动
以java应用程序为例,打包为tianlong.jar,程序入口为tianlong.QueueTest. 下面在linux的/opt下建立tianlong目录,复制tianlong.jar到/opt/ ...
- python列表分页
列表分页 上章的结束,若在实际开发过程中,会发现一个问题,那就首页或关注分享,是一下子按时间顺序全部显示出来,这在实际项目中不可能出现的,想想实际中的产品是如何做的? 一般来说,无非是两种,一种是 ...
- 【16.67%】【codeforces 667C】Reberland Linguistics
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- 【Cocos2d-x Lua】数据库封装类型的操作
Lua数据库封装类型的操作 使用演示样例 lua代码: require("DB") -- 保存一个字符串(数据库中存储的数据都是以字符串的形式保存的) DB:getInstance ...
- 经Gradle采取Jenkins的build
如今,企业都太多Jenkins去管理apk,后该代码被提交jenkins在生成build 因此,我们可以得到jenkins提交版本 Jenkins在编制job什么时候,有一个内置的可变BUILD_NU ...
- windows 下 TensorFlow(GPU 版)的安装
windows 10 64bit下安装Tensorflow+Keras+VS2015+CUDA8.0 GPU加速 0. 环境 OS:Windows 10,64 bit: 显卡:NVIDIA GeFor ...
- yii2.0复选框默认选中
<?php $model->node = array('0','2') ;?> <? echo $form->field($model,'node')->che ...
- c语言bit倒置最好的算法-离msb-lsb至lsb-msb
问题 什么是例如最好的算法,下面的转换? 0010 0000 => 0000 0100 从详细的转换MSB->LSB至LSB->MSB, 所有的Bit必须扭转,着.这并非字节顺序的交 ...
- linux 下Eclipse for C/C++的不常见设置
设置1:build project的时候,让编译器支持 三字母词. 项目文件右击--> Properties-->C/C++ Build--> Settings 如图设置: 再 C ...