다음을 통해 공유


링커 도구 오류 LNK2004

gp relative fixup overflow to 'target'; 짧은 섹션 'section'이 너무 크거나 범위를 벗어났습니다.

섹션이 너무 컸습니다.

이 오류를 해결하려면 #pragma 섹션(".sectionname", 읽기, 쓰기, long)을 통해 긴 섹션에 데이터를 명시적으로 배치하고 데이터 정의 및 선언을 사용하여 __declspec(allocate(".sectionname")) 짧은 섹션의 크기를 줄입니다. 예를 들면 다음과 같습니다.

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

논리적으로 그룹화된 데이터를 8바이트보다 큰 데이터 컬렉션이 될 자체 구조로 이동할 수도 있습니다. 이 컬렉션은 컴파일러가 긴 데이터 섹션에서 할당합니다. 예를 들면 다음과 같습니다.

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

이 오류 다음에는 심각한 오류가 발생합니다 LNK1165.