2011-05-15 59 views
1

当我编译SPU程序,我得到以下编译错误:细胞SPU错误使用C

(.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> 

回答

1

的错误是指:利用定位模式SPU_ADDR18

  • 的对象引用符号“_end”

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

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

+0

此外:您已经要求提供16组4倍时间的2048字节行,即128KB的缓存 - 这是本地商店的重要组成部分。 – 2011-12-18 22:11:41

0

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