0

나는 링커 또는 로더에 대한 많은 기사를 읽었지만
다른 객체 모듈의 위치에 대한 심볼릭 참조로 객체 모듈에서 절대 참조를 대체 할 책임이있는 사람을 혼란스럽게합니다. 링커가 다른 객체 모듈 또는 로더에서 심볼릭 참조를 대체합니까? 메인 메모리의 프로그램로드 시간에 이것을 만듭니다.심볼릭 참조 링커 또는 로더에 대한 책임이있는 사람

+0

이걸 실험적으로 볼 수 있어야합니다. 객체 (어셈블러/컴파일러)는 필요한 것을 기호화 된 이름으로 지정합니다. 링커는 링커 스크립트에 정의 된 항목에 대해 확실하게 상징적 인 이름을 추가합니다. 링커는 객체간에 점을 전역 적으로 연결할 수있는 유일한 객체이므로 하나의 객체에 extern이 있고 다른 객체에 해당 항목이 포함되어 있으면 링커에서 항목을 추가하고 두 항목을 함께 연결하여 업데이트합니다. –

+0

어디에 로더가 들어 왔는지 잘 모르겠다. 정의하기가 조금 늦다. –

+0

데이터 항목과 그 심볼의 예를 원하는 객체와 바이너리에 제공한다. 예제를 기본적으로 제공한다. –

답변

0

객체 모듈 간의 심볼 종속성을 해결하는 것은 일반적으로 링커의 책임이었습니다. 링커는 모든 개체 파일을 검사하고 모든 기호 참조를 확인하고 모 놀리 식 실행 파일을 만듭니다. 그러나이 접근법은 공유 라이브러리, 즉 다른 실행 파일간에 공유 할 수 있고로드 타임에 프로그램에 링크되는 객체 모듈을 도입 할 때 무너집니다. 이 작업을 수행하기 위해 링커의 일부가 로더로 이동하여 종속성을 공유 책임으로 해석합니다. 링커는 실행 파일과 공유 라이브러리 간의 종속성을 해결하는 동안 객체 파일과 정적 라이브러리 간의 종속성을 해결합니다.