Symbian 无法进入程序原因归总


0 对于能进入程序的异常退出,极限情况均可以通过日志跟踪出问题所在。一下只讨论根本无法进入程序的原因。

1 每一个Symbian应用程序对应有一个唯一的UID,但这个设计上本来唯一的UID,却重复出现在Symbian多个程序文件里,在Symbian MMP, RSS, PKG等文件中均能发现它的影子。如果各文件里的UID不一致,程序将无法正常开启。

2 在打包sis的时候,忘了打包系统资源文件,如AIF,MIF,或RSS等,均会导致程序无法正常启动。

3 程序依赖的DLL不存在,亦会导致程序无法正常启动。

4 程序调用的函数在依赖的DLL中不存在(这个不太确定报错时机)。

5 程序代码过大也会导致程序无法正常进入,具体执行时报错“功能表:此功能不被支持”。用S603rdMR编译双城的时候,被这个错误折腾了半宿。后来仔细看编译输出,发现编译时,GCCE已经作了警告:
arm-none-symbianelf-ld: section .rodata [0038d050 -> 0049005f] overlaps
section .data [00400000 -> 004051a5]
arm-none-symbianelf-ld: section .bss [004051a6 -> 004051a7] overlaps section
.rodata [0038d050 -> 0049005f]。
针对该问题具体解决方案有二:
A 优化代码,减小体积。可以在MMP中加入下面一行提示编译器进行优化:
OPTION GCCE -O2 -fno-unit-at-a-time
据说在FP1及之后的版本已经默认该选项了。
B 改变进程起始地址。具体修改Epoc32/tools/cl_bpabi.pm第792行和799行,将0x400000改为0xA00000。也可以只改工程相关的设置,在MMP中加入:
EPOCDATALINKADDRESS 0x005f0000

6 待续
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值