링커 (컴퓨팅)

위키백과, 우리 모두의 백과사전.
이동: 둘러보기, 검색
링크 과정을 간단히 나타낸 그림. 목적 파일과 정적 라이브러리가 새로운 라이브러리나 실행 파일로 병합되고 있다.

링커(linker) 또는 링크 에디터(link editor)는 컴퓨터 과학에서 컴파일러가 만들어낸 하나 이상의 목적 파일을 가져와 이를 단일 실행 프로그램으로 병합하는 프로그램이다.

OS/360과 같은 IBM 메인프레임 환경에서 이 프로그램은 링키지 에디터(linkage editor)로 알려져 있다.

유닉스 계열 운영 체제에서 로더를 링커의 동의어로 사용되기도 한다. 이 밖에 다른 용어들도 사용되었다. 이를테면 SINTRAN III에서는 링커가 수행한 프로세스를 로딩(loading→실행 코드를 파일로 로드)이라 하였다.[1] 이러한 용도가 컴파일 시간 프로세스와 실행 시간 프로세스의 구별을 모호하게 만들었기 때문에, 이 문서는 전자의 의미로는 링크(linking)로, 후자의 의미로는 로드(loading)로 언급할 것이다. 그러나 일부 운영 체제에서 동일 프로그램은 프로그램을 링크하고 로드하는 작업을 모두 수행한다. 동적 링크를 참조할 것.

개요[편집]

컴퓨터 프로그램들은 일반적으로 여러 부분의 모듈로 이루어진다. 이 모든 부분/모듈들은 하나의 목적 파일 안에 포함될 필요는 없으며 이 경우 각각을 기호로 부른다. 일반적으로 모든 목적 파일은 3가지 종류의 기호를 포함할 수 있다:

  • 정의된 기호(defined symbol) - 다른 모듈들에 의한 호출을 허용
  • 정의되지 않은 기호(undefined symbol) - 특정 기호들이 정의된 다른 모듈들을 호출
  • 지역 기호(local symbol) - 재배치를 위해 목적 파일 안에서 내부적으로 사용

동적 링크[편집]

수많은 운영 체제 환경은 동적 링크를 허용하며 프로그램이 실행될 때까지 정의되지 않은 일부 기호들을 해결하는 일을 나중으로 미룬다. 다시 말해, 실행 코드에는 정의된 기호, 또 이들의 정의들을 제공하는 오브젝트나 라이브러리의 목록이 여전히 포함되어 있다. 프로그램을 로드하면 이러한 오브젝트나 라이브러리도 로드할 것이며 마지막 링크를 수행한다. 동적 링크는 링커가 필요 없다.

이러한 접근에는 두 가지 이점이 있다:

  • 자주 쓰이는 라이브러리 (이를테면 표준 시스템 라이브러리)는 한 위치에만 저장되어 있으며 여러 단일 라이브러리로 중복될 필요는 없다.
  • 라이브러리 함수의 오류가 라이브러리 파일의 교체로 수정된다면 모든 프로그램은 다시 시작할 때 동적으로 이러한 수정에 영향을 받을 수 있다.

단점은 다음과 같다:

  • 윈도 플랫폼에서 비호환 업데이트 DLL로 불리는 DLL 지옥이 이전 DLL의 행위에 의존했던 실행 파일의 실행을 저지할 수 있다.
  • 라이브러리를 함께 사용하는 프로그램과 라이브러리 모두 검증이 필요할 수 있다. (정확성, 문서 요구 사항, 성능 등)

같이 보기[편집]

참고문헌[편집]

  1. BRF-LINKER User Manual. ND-60.196.01. 08/84.
  • David William Barron, Assemblers and Loaders. 1972, Elsevier.
  • C. W. Fraser and D. R. Hanson, A Machine Independent Linker. Software-Practice and Experience 12, 4 (April 1982).
  • IBM Corporation, Operating System 360, Linkage Editor, Program Logic Manual, 1967 [1]
  • Douglas W. Jones, Assembly Language as Object Code. Software-Practice and Experience 13, 8 (August 1983)
  • John R. Levine: Linkers and Loaders, Morgan-Kauffman, ISBN 1-55860-496-0. [2]
  • Leon Presser, John R. White: Linkers and Loaders. ACM Computing Surveys, Volume 4, Number 3, September 1972, pp. 149–167 [3]
  • Norman Ramsey, Relocating Machine Instructions by Currying. (1996) [4]
  • David Salomon, Assemblers and Loaders. 1993 [5]

바깥 고리[편집]