打印
[ZLG-ARM]

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

[复制链接]
1500|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xlander|  楼主 | 2009-5-27 16:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我有一个项目代码,代码比较复杂,我剥离了其中一部分,封装成.a库文件,我发现封装成库文件后,运行结果与原先不一致了,代码都是相同的。
经过调试发现,可能是库文件中的代码重写了一些内存变量,不过这些内存变量属于越界访问(原理同数组越界,重写了本不属于他们的变量)。

在我的代码中使用了memcpy,strcpy等库函数,没有使用printf等输入输出函数,我觉得没有必要重写__rt_lib_init(), __rt_exit(), 和__rt_lib_shutdown()。我也没有调用locale()。

我的模板是基于zlg的。

我在网上查了很多,没有找到相关的资料,请高人,帮我分析下?
在编译、链接.a文件时候需要注意些什么?

相关帖子

沙发
xlander|  楼主 | 2009-5-31 09:12 | 只看该作者

顶起来,求高人指点

使用特权

评论回复
板凳
junze| | 2009-6-1 12:07 | 只看该作者

gcc

我用的WINARM,打包时,我是先按照正常的编译,然后,把编译出来的*.o文件再手工加到*.a里去.然后把源文件去掉,把连接的文件加上去.
然后再编译一遍,是可以编译的.

我先前是手工编译*.o文件的,但好象有点问题,有可能是编译选项和一起编译时不一样吧.也就没管.

使用特权

评论回复
地板
xlander|  楼主 | 2009-6-2 09:00 | 只看该作者

会不会跟scatter file有关系?

感觉好象是分配的变量地址重叠了。
我没有针对.a文件做任何处理,像下面:


   ROM_EXEC 0x80000000
    {
        Startup.o (vectors, +First)
        * (+RO)
    }

使用特权

评论回复
5
xlander|  楼主 | 2009-6-2 09:17 | 只看该作者

junze的办法

junze的办法,我不会弄。

如果我不与.a文件链接,而是直接与.o文件链接,不知道效果是不是一样的?

使用特权

评论回复
6
xlander|  楼主 | 2009-6-3 11:26 | 只看该作者

问题不再出现了

似乎是scatter file中,分配的堆和栈重叠了,我加大了栈顶的地址后,原来的问题消失了。

谢谢大家。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

65

主题

165

帖子

0

粉丝