Compartilhar via


Erro das ferramentas de vinculador LNK2004

estouro de correção relativa de gp para 'target'; a seção curta 'section' é grande demais ou está fora do intervalo.

A seção era grande demais.

Para resolver esse erro, reduza o tamanho da seção curta, colocando dados explicitamente nas seções longas por meio de #pragma section(".nomedaseção", read, write, long) e usando __declspec(allocate(".sectionname")) em definições e declarações de dados. Por exemplo,

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

Você também pode mover dados agrupados logicamente para a estrutura deles próprios, que será uma coleção de dados maior que 8 bytes que o compilador alocará em uma seção de dados longa. Por exemplo,

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

Esse erro é seguido por um erro fatal LNK1165.