编译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>
答案 0 :(得分:1)
错误意味着:
对象使用重定位模式SPU_ADDR18引用符号'_end'
符号'_end'的实际地址对于所使用的参考模式来说太大了。
_end
是传统上在代码和数据段末尾定义的符号。因此,最有可能的是,您拥有的代码和静态数据多于SPU支持。 (SPU支持256Kb,即18位地址,所以我猜重定位类型SPU_ADDR18是最灵活的一种)。
答案 1 :(得分:0)
错误意味着您正在构建的elf可执行文件不适合SPU内存;可能是因为cache-api.h
标头定义了一些静态/全局变量。请注意,您的可执行文件不能使用超过251Kb的内存(其中一部分可能是作业内核,代码和数据的一部分)。