2011-05-15 62 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的內存(其中一部分可能是作業內核,代碼和數據的一部分)。