링커, 로더, 실행 파일

Linux 공유 라이브러리에서 libfoo.so.1의 「.1」과 같은 soname의 버전 번호를 올리는 것은 일반적으로 어떤 경우인가?

  1. A결함을 하나라도 고쳤을 때
  2. B라이브러리 파일을 다른 디렉터리로 옮겼을 때
  3. C함수의 인수나 구조체 배치를 바꾸는 등, 오래된 프로그램과의 ABI 호환성이 깨지는 변경을 했을 때
정답과 해설 보기

정답: C. 함수의 인수나 구조체 배치를 바꾸는 등, 오래된 프로그램과의 ABI 호환성이 깨지는 변경을 했을 때

동적 링크 프로그램은 soname으로 지정한 공유 라이브러리를 실행 시에 사용합니다. 호환성을 유지한 수정이라면 같은 soname인 채로 교체하기만 하면 모든 프로그램에 반영됩니다. 반면 인수의 타입이나 구조체의 크기를 바꾸면 오래된 프로그램이 잘못된 전제로 호출하게 되므로, soname의 번호를 올려 별도의 라이브러리로 취급하고 오래된 버전과 나란히 둘 수 있게 합니다.

  • A. 호환성을 유지하는 수정이라면 번호는 바꾸지 않습니다.
  • B. 위치는 버전과 관계가 없습니다.
  • C. 올바릅니다. 오래된 프로그램이 실수로 새 버전을 사용하지 않게 합니다.
이 분야 연습하기 분야로 돌아가기

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

  1. Linux에서 ldd 명령을 실행 파일에 사용하면 알 수 있는 것은?
  2. 주요 OS에서 사용하는 실행 파일 형식의 조합으로 올바른 것은?
  3. 재귀가 너무 깊어져 스택의 상한을 넘었을 때, Linux 등에서 일반적으로 일어나는 일로 올바른 것은?
  4. C 언어에서 초깃값을 쓰지 않은 지역 변수와 전역 변수의, 사용을 시작했을 때의 값에 대한 설명으로 올바른 것은?
  5. malloc과 free를 반복하는 사이에, 빈 메모리의 합계는 충분한데도 큰 영역을 한꺼번에 확보하지 못하게 되는 경우가 있다. 이 현상을 무엇이라고 하는가?

이 분야의 비교