本文介绍的是在Linux上开发Qt,对于这篇文章本人感觉很有成就感,因为你看完之后,有点像越狱。那么看看本文的讲解吧。
对于诺基亚不提供在Linux环境下的Symbian SDK这件事情,我已经忍了很久了。现在它终于迈出了一小步。
Qt Labs终于在几天前推出了如何在Linux开发Qt for Symbian应用的一篇博客,需要自己从源代码编译Qt for Symbian的版本。实话说,还不是很方便。如果你不着急用,还是静待官方推出编译好的安装包吧,那时候跟编普通Qt for Linux应用没什么区别了,执行qmake;make就能搞定。如果你和我一样有编译狂躁症,或者build控,那么一起上路吧:),老外文章得贝得贝说一大通,感觉步骤很多似的,其实没那么多。
预备条件:因为目前的Symbian SDK并非为Linux专用,而是直接借用了Windows版本的,所以为了保证SDK中的那些工具能够在Linux下使用,你需要先把Wine(Linux下的windows 模拟器)装上。
下载Symbian SDK
需要下载两个安装包,这里使用S60 5th版本,另外Qt需要open c & cpp的插件。下载地址分别为
GNUPOC工具下载
gnupoc有点陌生,也是在Linux上开发symbian应用的核心组件。可以将gnupoc拆开成gnu-poc来理解,就是gnu下的epoc环境。利用该工具可以将我们从windows下下载的symbian sdk安装包解压安装到Linux环境中,GNUPOC下载地址为http://www.martin.st/symbian,选版本1.15即可。
Symbian SDK 安装配置
将上面下载的GNUPOC解压后,执行以下三条命令
- cd gnupoc-package-1.15/sdk
- ./install_gnupoc_s60_50 ~/S60_5th_Edition_SDK_v1_0_en.zip ~/symbiansdk
- ./install_openc_16_s60 ~/work/s60_open_c_cpp_plug_in_v1_6_en.zip ~/symbiansdk
下载一个Symbian SDK的补丁文件,然后利用下面命令打上补丁
- cd ~/symbiansdk
- gunzip symbiansdk-gcce.gz
- patch -p0 < symbiansdk-gcce
下载arm编译器
没有特别好说的,请下载arm-symbian编译器,然后解压
配置环境变量
将前面的安装好的SDK以及编译器中的一些工具,设置到个人用户的.bashrc中
- export EPOCROOT=$HOME/symbian-sdk/
- QTDIR=$HOME/build/qt
- gcceDir= full/path/to/arm-2009q3/bin
- export PATH=$QTDIR/bin:$EPOCROOT/epoc32/tools:$gcceDir:$PATH
开始编译吧
Qt源码需要用到即将发布的Qt-4.7-beta版,我是直接使用http://qt.gitorious.org/qt/qt代码仓库里的版本,然后在QTDIR目录下执行如下编译命令
- $HOME/qt/configure -platform linux-g++ -xplatform symbian/linux-gcce -arch symbian -no-webkit -little-endian
- make
- cd src
- make sis
遇到的问题
1. configure时提示无法判断littel-endian还是big-endian
解决办法:在configure命令参数中加入-little-endian选项
2. 在调用rcomp生成symbian资源文件时提示”can’t write UIDs to s60main.rsc”
原因: 因为rcomp调用了另外一个应用uidcrc.exe,wine无法找到它(Shiroki@CuteQt有功于此)
解决方法: 将symbiansdk//epoc32/tools/uidcrc.exe拷贝.wine/drive_c/windows/system32目录下
3.编译的时候有两个文件提示TDesC等symbian标识符不认识
解决方法:给src/gui/kernel/qsoftkeymanager_s60_p.h和src/gui/kernel/qkeymapper_s60.cpp文件头部的地方,加入下面两行
- #include <private/qcore_symbian_p.h>
- #include <private/qt_s60_p.h>
小结:在Linux上开发Qt的内容介绍完了,怎么感觉有点像智能手机越狱呢?呵呵,还是希望对你有帮助!