我是这个社区的新手,因为我以前从未创建过帐户并提出过问题,但我一直使用这个网站来解决我的编程问题。所以谢谢!但这一次,我找不到符合我确切需求的其他问题。如果这是重复,我道歉。
我在基础OS 0.2(Luna),Ubuntu 12.04的衍生物。我正在使用avr-gcc库来编译ATmega32u4微处理器的程序。我开发它时已经多次编译了这个程序,但直到现在我还没有收到这个错误。我在下面粘贴它。
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/libc.a(log.o):../../../libm/fplib/log.S:100: relocation truncated to fit: R_AVR_13_PCREL against symbol `__addsf3' defined in .text section in /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_addsub_sf.o)
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/libc.a(modf.o):../../../libm/fplib/modf.S:90: relocation truncated to fit: R_AVR_13_PCREL against symbol `__subsf3' defined in .text section in /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_addsub_sf.o)
collect2: ld returned 1 exit status
make: *** [main.elf] Error 1
简而言之,我不知道这是指什么。我的程序包含大量文件,所以我不能在这里发布完整的内容;相反,我会对以下问题的一般答案感兴趣:
非常感谢大家。我感谢这个社区的帮助。
答案 0 :(得分:2)
有关重定位到适合错误的讨论,请参阅this。我从未使用过avr,但是从重定位类型r_avr_13_pcrel,我猜这意味着你的指令相对于程序计数器有一个13位的地址。 这意味着数据(可能是您正在调用登录)与日志代码的距离不超过13位。 13位仅为8192字节 所以,你试图获取地址的东西距离它使用的指令超过8 kb。不幸的是,有问题的指令是在libm内,而不是你的代码,所以修复它可能更棘手。 另请注意,由于它是PC相对的,因此您可能只有4096个字节,因为您有一个符号位,因此您可以在地址之前和之后引用位置。
因此,这可能与您的可执行文件的代码大小有关。