Errore degli strumenti del linker LNK2004
gp relative fixup overflow to 'target'; sezione breve 'section' è troppo grande o fuori intervallo.
La sezione era troppo grande.
Per risolvere questo errore, ridurre le dimensioni della sezione breve, inserendo in modo esplicito i dati nelle sezioni lunghe tramite #pragma section(".sectionname", read, write, long) e usando __declspec(allocate(".sectionname"))
le definizioni e le dichiarazioni dei dati. ad esempio:
#pragma section(".data$mylong", read, write, long)
__declspec(allocate(".data$mylong"))
char rg0[1] = { 1 };
char rg1[2] = { 1 };
char rg2[4] = { 1 };
char rg3[8] = { 1 };
char rg4[16] = { 1 };
char rg5[32] = { 1 };
È anche possibile spostare i dati raggruppati logicamente nella propria struttura che sarà una raccolta di dati maggiore di 8 byte, che il compilatore allocherà in una sezione di dati lunga. ad esempio:
// from this...
int w1 = 23;
int w2 = 46;
int w3 = 23*3;
int w4 = 23*4;
// to this...
struct X {
int w1;
int w2;
int w3;
int w4;
} x = { 23, 23*2, 23*3, 23*4 };
Questo errore è seguito da un errore LNK1165
irreversibile .