링커 (컴퓨팅)

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

링커(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]

바깥 고리[편집]