s60 5版程序在symbian 3适配,升级,编译
2011-04-07 18:09
316 查看
最近在做symbian^3的适配,因为我们的假面采用的都是系统控件,所以适配起来还是挺简单的。但是,在适配过程中也遇到了一些问题。
1、编译失败,很多头文件找不到
这是因为symbian^3将一些头文件放在了新的文件夹下面,只要将头文件所在的目录加到mmp中就可以了。当然,系统也提供了一个宏定义来方便我们的操作:APP_LAYER_SYSTEMINCLUDE。只要在mmp中嫁屉这个宏基本上就可以了。另外,还有一个叫APP_LAYER_SYSTEMINCLUDE_SYMBIAN的宏定义,跟前一个不同的是这个宏定义展开后包含的系统路径没前一个多,一般情况下,我们用第二个就可以了。最后一点,为了使我们的mmp文件可以适用于多个sdk,我们只需要嫁屉一个宏判断就可以了。
#ifdef APP_LAYER_SYSTEMINCLUDE_SYMBIAN
APP_LAYER_SYSTEMINCLUDE_SYMBIAN
#endif
这样,你的mmp文件既可以用于symbian^3也可以适用于其他版本的sdk了。
2、编译帮助文档失败
Sorry /epoc32/tools/cshlpcmp.bat is not supported in this release. Please use a different
device. Use 'devices' to view the available devices.
这是因为symbian^3的SDK中将编译帮助文档的模块给去掉了,我们只要从其他SDK版本中将相应的编译工具复制一份放在相应的目录下就可以了。
进入到SDK目录的/epoc32/tools目录下,复制cshlpcmp、perl、perlib三个文件夹到symbian^3的SDK的/epoc32/tools目录下,另外,复制rtf2ptml.exe、cshlpcmp.bat、cshlpcmp_gui.bat、cshlpcmp.jar、cshlpcmp.pl五个文件到/epoc32/tools目录下。再编译帮助文档就没问题了。
3、static library
这个网上有几个解决办法
1)将 armv5/udeb armv5/urel 里所有的东西拷贝到gcce/udeb gcce/urel
2)检测mmp中的staticlib 是否有没用到的,没用的或找不到的,删掉
如果你额应用中有静态库的话,还会遇到一个问题。
checklib: error: couldn't open file.
这是因为在编译GCC的版本的时候,系统会去armv的目录下找静态库,当然找不到了。我们只需要修改一下
cl_bpabi.pm这个文件,在/epoc32/tools目录下面。将
PrintList("/' ///n/t/'/./&Generic_Quote/(/"///$/(EPOCSTATLINK$Bl d/)/////$_/"/)" @StatLibList);
修改成
PrintList("/' ///n/t/'/./&Generic_Quote/(/"///$/(EPOCBSFSTATLINK $Bld/)//$_/"/)" @StatLibList);
位置大概在1068行左右
my $run_checklib = 0;
if (@StatLibList && $BasicTrgType =~ /^(EXE|DLL)$/o && !$SystemTrg && main::StdCppSupport())
就可以了
1、编译失败,很多头文件找不到
这是因为symbian^3将一些头文件放在了新的文件夹下面,只要将头文件所在的目录加到mmp中就可以了。当然,系统也提供了一个宏定义来方便我们的操作:APP_LAYER_SYSTEMINCLUDE。只要在mmp中嫁屉这个宏基本上就可以了。另外,还有一个叫APP_LAYER_SYSTEMINCLUDE_SYMBIAN的宏定义,跟前一个不同的是这个宏定义展开后包含的系统路径没前一个多,一般情况下,我们用第二个就可以了。最后一点,为了使我们的mmp文件可以适用于多个sdk,我们只需要嫁屉一个宏判断就可以了。
#ifdef APP_LAYER_SYSTEMINCLUDE_SYMBIAN
APP_LAYER_SYSTEMINCLUDE_SYMBIAN
#endif
这样,你的mmp文件既可以用于symbian^3也可以适用于其他版本的sdk了。
2、编译帮助文档失败
Sorry /epoc32/tools/cshlpcmp.bat is not supported in this release. Please use a different
device. Use 'devices' to view the available devices.
这是因为symbian^3的SDK中将编译帮助文档的模块给去掉了,我们只要从其他SDK版本中将相应的编译工具复制一份放在相应的目录下就可以了。
进入到SDK目录的/epoc32/tools目录下,复制cshlpcmp、perl、perlib三个文件夹到symbian^3的SDK的/epoc32/tools目录下,另外,复制rtf2ptml.exe、cshlpcmp.bat、cshlpcmp_gui.bat、cshlpcmp.jar、cshlpcmp.pl五个文件到/epoc32/tools目录下。再编译帮助文档就没问题了。
3、static library
这个网上有几个解决办法
1)将 armv5/udeb armv5/urel 里所有的东西拷贝到gcce/udeb gcce/urel
2)检测mmp中的staticlib 是否有没用到的,没用的或找不到的,删掉
如果你额应用中有静态库的话,还会遇到一个问题。
checklib: error: couldn't open file.
这是因为在编译GCC的版本的时候,系统会去armv的目录下找静态库,当然找不到了。我们只需要修改一下
cl_bpabi.pm这个文件,在/epoc32/tools目录下面。将
PrintList("/' ///n/t/'/./&Generic_Quote/(/"///$/(EPOCSTATLINK$Bl d/)/////$_/"/)" @StatLibList);
修改成
PrintList("/' ///n/t/'/./&Generic_Quote/(/"///$/(EPOCBSFSTATLINK $Bld/)//$_/"/)" @StatLibList);
位置大概在1068行左右
my $run_checklib = 0;
if (@StatLibList && $BasicTrgType =~ /^(EXE|DLL)$/o && !$SystemTrg && main::StdCppSupport())
就可以了
相关文章推荐
- s60 5版程序在symbian 3适配,升级,编译
- 标准C程序symbian编译总结(1)
- Oracle9i R2 Pro*c 因为patch升级导致编译出现程序非法操作的问题
- [Symbian]在S60程序中实现动态曲线图
- symbians60 编译时确定sdk版本
- Typhon升级到5.8,编译原来程序出现提示:Compilation raised exception internally
- 命令行下编译Symbian程序环境配置总结
- 最近升级了Xcode4.2,结果编译之后发现程序的很多地方都不能用,或者出问题,所以结合网友们的情况把遇见的列出来:
- 用Eclipse开发Symbian S60 J2ME程序
- ios升级为5后,程序编译时遇到的关于libz 1.2.3.dylib类包的各种问题解决办法
- Symbian软件开发(3):运行S60 3rd FP1版控制台程序
- 编译运行symbian程序(如何打开一个symbian工程)
- 命令行下编译Symbian程序
- S60 Symbian程序框架及启动过程简介
- android studio 升级后,经常会对gradle升级,然后编译原来程序会出现gradle版本太老的问题
- Symbian S60 5th 切换程序UI方向为横屏或竖屏
- Symbian S60 基本程序的框架
- 项目从vs2005升级到vs2010,新编译的64位程序启动时找不到K32EnumProcesses
- centos5.8 x86_64 gcc升级到4.4.7解决了编译32位程序的问题
- SDK升级到4.0后,兼容编译3.1程序的方法