s60 5版程序在symbian 3适配,升级,编译

 最近在做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()) 

  就可以了

你可能感兴趣的:(s60 5版程序在symbian 3适配,升级,编译)