What does "Error: L6248E: cannot have address type relocation"mean?
Answer
This linker error can occur when trying to build "Position Independent"code. Consider a small example like:
#include <stdio.h>
char *str = "test";
int main(void)
{
printf ("%s",str);
}
when compiled and linked with:
armcc -c -apcs /ropi pi.c
armlink -ropi pi.o
the linker will report a message of the form:
Error: L6248E: pi.o(.data) in ABSOLUTE region 'ER_RW' cannot have address/offset type
relocation to .constdata in PI region 'ER_RO'.
For the code above, the compiler generates a global pointer "str"to the char string "test". The global pointer "str"will need to be initialized to the address of the char string "test"in the .constdata section. However, absolute addresses cannot be used in a PI system, so the link step fails, because of the ABS32 relocations to (position independent) .constdata.
To resolve this, you must re-write the code to avoid the explicit pointer. Two possible ways are shown below:
1) Use a global array instead of a global pointer:
#include <stdio.h>
const char str[] = "test";
int main(void)
{
printf ("%s",str);
}
2) Use a local pointer instead of a global pointer:
#include <stdio.h>
int main(void)
{
char *str = "test";
printf ("%s",str);
}
Please note that if you are using a list with multiple elements, such as:
char * list[] = {"zero", "one", "two"};
You will get a separate link error for each element in the array. In this case, the recommended solution is:
char list[3][5] = {"zero", "one", "two"};
with the print instruction being (for example):
printf("%s", list[1]);
Note that you will need to declare a two dimensional array for the list, with the first dimension as the number of elements in the array, and the second dimension as the maximum size for an element in the array.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[SwiftUI]List화한 CoreData를 가로 스와이프로 행 삭제하는 방법상당히 조사했지만 일본어 자료가 없었기 때문에 비망록으로 남겨 둔다. 아래와 같이 CoreData를 참조한 리스트를 가로 스와이프로 삭제하고 싶었다. UI 요소뿐만 아니라 원본 데이터 당 삭제합니다. 잘 다른 페이지...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.