1

编译 SPU 程序时,出现以下编译错误:

(.text+0x28): relocation truncated to fit: SPU_ADDR18 against symbol `_end' defined in *ABS* section in spu

这是什么意思?

只有在我一开始就包括在内之后才会出现错误:

#define CACHE_NAME MY_CACHE

#define CACHED_TYPE double

#define CACHELINE_LOG2SIZE 11

#define CACHE_LOG2NWAY 2

#define CACHE_LOG2NSETS 4

#include <cache-api.h>
4

2 回答 2

1

错误意味着:

  • 对象使用重定位模式 SPU_ADDR18 引用符号“_end”

  • 符号“_end”的实际地址对于所使用的参考模式来说太大了。

_end是传统上定义在代码和数据段末​​尾的符号。所以很可能,您拥有比 SPU 支持更多的代码和静态数据。(SPU 支持 256Kb 即 18 位地址,所以我猜重定位类型 SPU_ADDR18 是最灵活的一种)。

于 2011-05-16T11:23:00.187 回答
0

该错误意味着您正在构建的 elf 可执行文件不适合 SPU 内存;可能是因为cache-api.h标题定义了一些静态/全局变量。请注意,您的可执行文件不能使用超过 251Kb 的内存(其中一部分可能是作业内核、代码和数据的一部分)。

于 2011-05-16T12:51:15.947 回答