ld (gcc 암 임베디드 툴킷에서) 원하는 것을 수행하는 방법을 이해하는 데 어려움이 있습니다.ld가 링크 명령 파일에 지정되지 않은 섹션을 출력 파일에 포함시키는 이유는 무엇입니까?
예를 들어, 링크 할 몇 개의 .o 파일이 있습니다. 만 출력에 .foo 섹션이 필요하다고 말하십시오. 내가 명령 파일 link.ld에 넣고 :
SECTIONS{
.foo : {*(.text)}
}
을 가서 "LD -T link.ld file1.o fil2.o -o output.o"
그때 내가 출력 objdump를 사용합니다. 그리고 그것은 단지 각 입력 파일()에있는 모든 섹션을 포함하고 있으며 .foo라는 섹션이 전혀 없습니다. 이것이 왜 .foo라는 출력에 섹션이 없는지 가장 혼란스러운 부분입니까?
나는 이것을 http://www.scoberlin.de/content/media/http/informatik/gcc_docs/ld_3.html으로 읽었는데 모두 똑바로 보인다. 그런 단순한 링커 스크립트가 왜 내가 원하는 것을 원하지 않는지 이해할 수 없다.
나는 분명히 뭔가 빠져 있어야합니다. 누군가 출력 파일에 나타나는 섹션과 그 섹션을 정확하게 제어 할 수있는 방법을 설명 할 수 있습니까?
그런 다음 링커 스크립트의 포인트 것입니다 "나는 당신이 요청 만 섹션을 포함하는 링커를 알 수있는 방법이 있다고 생각하지 않는다"? 벽을 몰아 부치는 이유는 나 또한 -gc-sections -print-gc-sections을 시도하고 "사용되지 않는 섹션 제거 ..."를 출력하고이 섹션은 여전히 출력에 나타납니다! 이것들은 다른 섹션과 링크/심볼이없는 섹션입니다. – Jesse
또 다른 문제가 있습니다 : 가끔 무작위로 보이는 섹션이 출력 파일의 동일한 주소에서 링커 스크립트로 연속적으로 지정되는 경우가 있습니다. 이것은 LD에서 버그가 수 있도록 * 한 * : 내가 뭐하는 거지 모두는 다음과 같습니다. = 0x08000000 섹션 1 2 장 과 2 장 제 1 절 중복 끝납니다.이 말도 안되는 소리가 내 정신을 몰고 간다. 가장 간단한 장난감 예제 링커 스크립트 인이 문제를 해결하기 위해 3 일을 보냈다. – Jesse
@Jesse - 링커 스크립트의 요점은 링커에게 데이터를 주문하는 법을 알려주는 코드이다. 처음에는 벡터, 변수는 RAM에 있으며이 변수의 복사본은 플래시로 사용할 수 있습니다 (초기화 용). 링커에 버그가 없습니다. 저를 믿으십시오. 출력이 예상과 일치하거나 예상치 못한 결과가 발생할 때까지 작동하고 단계별로 요소를 제거/수정하는 완벽한 링커 스크립트로 시작하십시오. 다음은 STM32F1에 대한 간단한 스크립트입니다 - https://gist.github.com/FreddieChopin/3dee4b02b0ba9b9de518f30c14caa884 (http://distortos.org/에서 생성) –