링커, 로더, 실행 파일

동적 링크(공유 라이브러리)의 이점으로 올바른 것은?

  1. A실행 환경에 라이브러리가 없어도 반드시 동작한다
  2. B여러 프로그램이 하나의 라이브러리를 메모리 상에서 공유할 수 있고, 라이브러리를 갱신하면 다시 빌드하지 않아도 수정이 반영된다
  3. C시작 시 처리가 전혀 필요 없어져 정적 링크보다 반드시 빠르게 시작한다
정답과 해설 보기

정답: B. 여러 프로그램이 하나의 라이브러리를 메모리 상에서 공유할 수 있고, 라이브러리를 갱신하면 다시 빌드하지 않아도 수정이 반영된다

동적 링크에서는 실행 파일에 「어느 공유 라이브러리의 어느 함수를 사용하는가」만 기록하고, 실행할 때 동적 링커가 라이브러리를 읽어 들여 연결합니다. 공유 라이브러리의 코드는 바뀌지 않으므로 물리 메모리 상의 하나의 사본을 많은 프로세스가 공유할 수 있습니다. 결함이나 취약점의 수정도 라이브러리를 교체하기만 하면 끝납니다. 다만 시작할 때 결합하는 수고가 듭니다.

  • A. 라이브러리를 찾지 못하면 시작할 수 없습니다.
  • B. 올바릅니다. 메모리와 디스크 절약에도 도움이 됩니다.
  • C. 시작할 때 결합 처리가 필요합니다.
이 분야 연습하기 분야로 돌아가기

링커, 로더, 실행 파일의 다른 문제

  1. 동적 링크를 사용한 프로그램을 다른 컴퓨터에 복사해 실행했더니 시작되지 않았다. 가장 가능성이 높은 원인은?
  2. 정적 라이브러리(.a 파일)와 함께 링크할 때 링커가 실행 파일에 포함시키는 것으로 올바른 것은?
  3. GNU 링커에서 「gcc -lmylib main.o」처럼 정적 라이브러리를 그것을 사용하는 오브젝트 파일보다 앞에 쓰면 미정의 참조 오류가 나는 경우가 있다. 그 이유로 올바른 것은?
  4. 위치 독립 코드(PIC)에 대한 설명으로 올바른 것은?
  5. 공유 라이브러리에서 사용되는 GOT(전역 오프셋 테이블)의 역할로 올바른 것은?

이 분야의 비교