링커, 로더, 실행 파일
Linux 공유 라이브러리에서 libfoo.so.1의 「.1」과 같은 soname의 버전 번호를 올리는 것은 일반적으로 어떤 경우인가?
- A결함을 하나라도 고쳤을 때
- B라이브러리 파일을 다른 디렉터리로 옮겼을 때
- C함수의 인수나 구조체 배치를 바꾸는 등, 오래된 프로그램과의 ABI 호환성이 깨지는 변경을 했을 때
정답과 해설 보기
정답: C. 함수의 인수나 구조체 배치를 바꾸는 등, 오래된 프로그램과의 ABI 호환성이 깨지는 변경을 했을 때
동적 링크 프로그램은 soname으로 지정한 공유 라이브러리를 실행 시에 사용합니다. 호환성을 유지한 수정이라면 같은 soname인 채로 교체하기만 하면 모든 프로그램에 반영됩니다. 반면 인수의 타입이나 구조체의 크기를 바꾸면 오래된 프로그램이 잘못된 전제로 호출하게 되므로, soname의 번호를 올려 별도의 라이브러리로 취급하고 오래된 버전과 나란히 둘 수 있게 합니다.
- A. 호환성을 유지하는 수정이라면 번호는 바꾸지 않습니다.
- B. 위치는 버전과 관계가 없습니다.
- C. 올바릅니다. 오래된 프로그램이 실수로 새 버전을 사용하지 않게 합니다.