Sdílet prostřednictvím


Chyba linkerů LNK2004

gp relative fixup overflow to 'target'; krátký oddíl "section" je příliš velký nebo je mimo rozsah.

Oddíl byl příliš velký.

Pokud chcete tuto chybu vyřešit, zmenšete velikost krátkého oddílu tak, že explicitně vložíte data do dlouhých oddílů prostřednictvím #pragma section(".sectionname", čtení, zápis, long) a použití __declspec(allocate(".sectionname")) definic a deklarací dat. Příklad:

#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 };

Logicky seskupená data můžete také přesunout do vlastní struktury, která bude kolekcí dat větších než 8 bajtů, které kompilátor přidělí v oddílu s dlouhými daty. Příklad:

// 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 };

Za touto chybou následuje závažná chyba LNK1165.