Freigeben über


Linkertoolfehler LNK2004

gp relative Fixupüberlauf auf 'Ziel'; Der kurze Abschnitt "Abschnitt" ist zu groß oder außerhalb des Bereichs.

Der Abschnitt war zu groß.

Um diesen Fehler zu beheben, verringern Sie die Größe des kurzen Abschnitts, entweder durch explizites Einfügen von Daten in die langen Abschnitte über #pragma Abschnitt (".sectionname", Lesen, Schreiben, Lang) und verwenden __declspec(allocate(".sectionname")) sie datendefinitionen und Deklarationen. Ein auf ein Objekt angewendeter

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

Sie können auch logisch gruppierte Daten in eine eigene Struktur verschieben, die eine Sammlung von Daten größer als 8 Byte ist, die der Compiler in einem langen Datenabschnitt zuweist. Ein auf ein Objekt angewendeter

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

Auf diesen Fehler folgt ein schwerwiegender Fehler LNK1165.