爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 1721|回复: 10
收起左侧

[其它] Unknown relocation directive (70) [原因及解决办法,2008.6.3]

[复制链接]
发表于 2007-10-27 15:01:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册会员 微信登录

x
近几天下了IAR和几个ELF的源码下来研究并试着修改,玩了几天也算是渐入佳境。:/kka
但今日完成一部份修改後,按下”MAKE”总出现如下错误讯息:

Buil由于非常钦佩楼主,不得不说声好! configuration: SieHelpMan - Release_SGOLD
Updating build tree...
main.C
Linking
Internal Error: In function:  
Diagnostic: Unknown relocation directive (70)

P0: 0    P1: 0

Total number of errors: 1
Total number of warnings: 0

小弟经验不足,实在找不出问题何在,就此停滞不前。::?\dk
望先进前辈指点一二,告知问题究竟出在哪里,谢谢~::\\shx

附注:
小弟仅修改了main.c的内容,其他文件都没有动过,且玩了几天已Make过无数次,代码错误都能找出修正。但此情况貌似与代码无关?因为也未提示语法或参数错误,也无错误行号,另小弟若按Compile单独编译main.c文件,似乎也没有问题(IAR回应讯息如下)。

main.C

Done. 0 error(s), 0 warning(s)

___________________________________________
binghelingxi:
原因及解决办法,2008.6.3,在8楼

[ 本帖最后由 binghelingxi 于 2008-6-3 00:21 编辑 ]
 楼主| 发表于 2007-10-29 16:01:24 | 显示全部楼层

问题已解决!

经过大半天的摸索,总算找出问题所在。
把我有修改过的部份代码一行一行的改为注解、MAKE、查看MAKE编译信息,不断重覆,
最後找出问题是出现在一行wsprintf(ws,"%3d%",num);,想来想去看不出这行代码有什么问题,
後来随便改了一下,将%3d%改为%d%就不再出现那个状况了。
不过,问题虽然是解决了,但仍是不知所以然,还望有经验的先进前辈赐教。
回复 支持 反对

使用道具 举报

发表于 2007-10-29 16:08:58 | 显示全部楼层
怎么这个这么像我的某个ELF啊

                               
登录/注册后可看大图


楼主只要注意一下C语言中“%”这个符号在格式输入,格式输出中的用法就可以了
回复 支持 反对

使用道具 举报

发表于 2007-10-29 18:17:12 | 显示全部楼层
不如开个帖子讨论交流IAR相关的使用问题吧。
回复 支持 反对

使用道具 举报

发表于 2007-10-30 00:26:58 | 显示全部楼层
我以前也碰到这种情况,实在不知道怎么解决。不过最后还是搞定了,具体记不清了,好象跟楼主差不多。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-30 09:04:26 | 显示全部楼层
原帖由 jpg001 于 2007-10-29 18:17 发表
不如开个帖子讨论交流IAR相关的使用问题吧。

决定肯定百分之百赞成!
摸了一个星期的ELF,发现难处主要是在於不清楚IAR的使用、不了解函数的定义、不明白ELF的运行、不知道C语言的用法…,
C语言的用法还好解决,网上有不少教程可以看,也有很多资料可以参考,但其他…实在是无从下手,
IAR的使用,仅知道打开Workspace、知道Make,後来遇上状况问了阿冰才又知道了要将DATA和CODE要设为CONFIG才不会造成生成0字节BCFG的情况;
函数的部份,连有函数可以用、怎么用都不晓得,唯一的途径是看源码、看swilib…然後依照字面或他人源码去猜测函数的作用和用法;
ELF运行更是完完全全一无所知,只能靠比较、猜测去小幅度修改现成的源码,要想从无到有写出个ELF源码,我连"Hello World!"都写不出来…
引用阿冰回覆我的一句话:

资料,教程,没有

                               
登录/注册后可看大图
,纯靠自己领悟,加入项目大家可以互相交流

以目前资源如此欠缺的情况,单靠个人领悟,实在是很难有进展,毕竟并非每个人都是张无忌,悟性总是有限的。虽说可以靠大家互相交流来学习进步,但因为大家全是靠自己领悟,总的来说可能前辈们也只比刚入门的多了极为有限的一些了解。若说刚入门的我了解到1%,前辈们可能也只了解到2%、5%、10%,而且因为每个人努力的方向不尽相同,每个人所领悟到的方向、层面也不一样。若只是靠在群里的交流,也许参与讨论的二个人、三个人或四个人领悟了,但当另外又有人碰上相同的问题,除非刚好有问到这几个人,否则仍是很难突破。若是能够将大家各自领悟到的1%、2%、5%、10%…汇总起来,也许总体对於ELF的了解就可以达到50%甚至70%,有这样的进展,无异是打通了任督二脉,对於刚入门或资质悟性较差的人,也许就可以帮助他们的领悟从1%、2%提升到10%、20%;对於高手、大侠等悟性较好的人,说不定短时间内就能将这50%、70%化为已用,并带我们向80%、90%前进。

强烈建议针对这几方面分别设置讨论专帖及汇总帖,一个专门用来讨论,一个用来汇总大家在讨论帖中讨论出来的结果。大家在讨论帖中把大家所遇到的各种困难提出来讨论,透过讨论的过程让大家将自己的1%、2%、5%贡献出来,结果再整理到汇总帖中,成就总体的50%、70%。
1.IAR的使用、设置、问题排除。
2.各种函数的定义、用法、功能。
3.ELF的结构、运行方式...
4.ELF中使用到的资料型态、结构...
回复 支持 反对

使用道具 举报

发表于 2007-10-30 10:06:46 | 显示全部楼层
我也遇到过类似的错误,猜测可能是编译器的BUG。
我当时将"%d"改为"%u",编译通过。
回复 支持 反对

使用道具 举报

发表于 2008-6-3 00:16:06 | 显示全部楼层
吼吼。。。发现啦。。。
可能是IAR的BUG,如果一个字符串被
重复使用(在反汇编代码中要写入了两个位置),就会出现如下错误:
Diagnostic: Unknown relocation directive (70)
其实以ARM指令的能力的话,写在一个地方,其他位置调用就可以了。。。可能就是这里在连接程序里面出现了混乱。。。

因此,我们在使用一些频繁使用的字符串的时候,应该避开wsprintf(ws, "%t"...)这样的写法。
而用
const char percent_t[]="%t";
其它地方都直接来调用percent_t指针。。。这样就基本可以避开了。。。
wsprintf(ws, percent_t,...)

[ 本帖最后由 binghelingxi 于 2008-6-3 00:19 编辑 ]
回复 支持 反对

使用道具 举报

发表于 2008-6-3 13:36:21 | 显示全部楼层
%t
这个用法很容易出错

基本上问题都处在wsprintf上。。。。。。。。。。。。是这个函数的问题,应该是某些格式化不能多层处理。。。。。。
回复 支持 反对

使用道具 举报

发表于 2008-6-3 13:46:55 | 显示全部楼层

回复 9# zhangxxx 的帖子

是的,不过,也在我另外一个自己写的函数上出错了。。。因此基本可以确定是这个问题,按照我的方法做了之后就没问题了。。。
回复 支持 反对

使用道具 举报

发表于 2008-6-3 23:39:41 | 显示全部楼层
郁闷。。。调用函数时也出错,,,这下没法子了。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员 微信登录

本版积分规则

小黑屋|Archiver|手机版|爱技术 ( 沪ICP备08115260号-3 )

GMT+8, 2024-5-15 19:09

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表