[ZLG-ARM] 同样的代码,不一样的运行结果,离奇事件发生中...

[复制链接]
2476|5
 楼主| xlander 发表于 2009-5-27 16:38 | 显示全部楼层 |阅读模式
我有一个项目代码,代码比较复杂,我剥离了其中一部分,封装成.a库文件,我发现封装成库文件后,运行结果与原先不一致了,代码都是相同的。<br />经过调试发现,可能是库文件中的代码重写了一些内存变量,不过这些内存变量属于越界访问(原理同数组越界,重写了本不属于他们的变量)。<br /><br />在我的代码中使用了memcpy,strcpy等库函数,没有使用printf等输入输出函数,我觉得没有必要重写__rt_lib_init(),&nbsp;__rt_exit(),&nbsp;和__rt_lib_shutdown()。我也没有调用locale()。<br /><br />我的模板是基于zlg的。<br /><br />我在网上查了很多,没有找到相关的资料,请高人,帮我分析下?<br />在编译、链接.a文件时候需要注意些什么?<br /><br />
 楼主| xlander 发表于 2009-5-31 09:12 | 显示全部楼层

顶起来,求高人指点

  
junze 发表于 2009-6-1 12:07 | 显示全部楼层

gcc

我用的WINARM,打包时,我是先按照正常的编译,然后,把编译出来的*.o文件再手工加到*.a里去.然后把源文件去掉,把连接的文件加上去.<br />然后再编译一遍,是可以编译的.<br /><br />我先前是手工编译*.o文件的,但好象有点问题,有可能是编译选项和一起编译时不一样吧.也就没管.
 楼主| xlander 发表于 2009-6-2 09:00 | 显示全部楼层

会不会跟scatter file有关系?

感觉好象是分配的变量地址重叠了。<br />我没有针对.a文件做任何处理,像下面:<br /><br /><br />&nbsp;&nbsp;&nbsp;ROM_EXEC&nbsp;0x80000000<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Startup.o&nbsp;(vectors,&nbsp;+First)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;(+RO)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />
 楼主| xlander 发表于 2009-6-2 09:17 | 显示全部楼层

junze的办法

junze的办法,我不会弄。<br /><br />如果我不与.a文件链接,而是直接与.o文件链接,不知道效果是不是一样的?<br />
 楼主| xlander 发表于 2009-6-3 11:26 | 显示全部楼层

问题不再出现了

似乎是scatter&nbsp;file中,分配的堆和栈重叠了,我加大了栈顶的地址后,原来的问题消失了。<br /><br />谢谢大家。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

65

主题

165

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部