下载
首先下载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/