Because the MIPS Global Offset Table (GOT) is only 64K, any application can support at most 16K globals. This results in very large programs to not link with "relocation truncated to fit" errors.
The only workaround I'm aware of is to use the flag -xgot during linking. This allows the global offset table to use 32-bit values instead of 16-bit values. Unfortunately, all libraries have to be created using this flag (like libc, libgcc, libm, libCascade*, etc.)
SGI had a similar problem many years ago, and they created two sets of libraries -- one linked normally and one linked with the -xgot flag.
A summary of what the "web wisdom" is on this topic is nicely presented in this link:
Since we don't have the entire source to Roku, we can't fix the problem ourselves. So, Roku, can you please supply us with an alternate set of libraries that can be linked with large programs using the -xgot flag?
Alternatively, does anyone have another suggestion on how to get around the "relocation truncated to fit" error?