버전이 동일하다면 공유 라이브러리 ABI는 호환되나요?

버전이 동일하다면 공유 라이브러리 ABI는 호환되나요?

시스템(예: Ubuntu x64)에서 libc.so.6과 연결되는 프로그램을 컴파일한다고 가정해 보겠습니다. 이 바이너리를 동일한 libc 버전 6(예: Fedora x64)을 사용하는 다른 시스템으로 가져가면 제대로 작동하는 것 같습니다.

내 질문은 so 버전이 동일한 한 ABI가 안정적이라는 것이 어느 정도 계약입니까?

답변1

아니요, 공유 라이브러리가 배포판 전반에 걸쳐 ABI와 호환될 필요는 없습니다. 나는 그것이 합리적인 기대라고 생각하지만 ABI 중단이 발생하므로 ABI 호환성에 맹목적으로 의존할 수는 없습니다.

예는 다음과 같습니다 libstdc++. Ubuntu 16.04(GCC 5 포함) 및 CentOS 7(GCC 4.8 포함)에서 해당 so항목은 다음 위치에 있습니다.ABI 인터럽트. 설정 없이 Ubuntu 16.04에서 C++로 컴파일된 소프트웨어는 _GLIBCXX_USE_CXX11_ABICentOS 7에서 실행되지 않습니다. ABI 중단은 일반적으로 버그 수정의 주요 버전 번호를 libstc++.so.6변경하지 않는 배포 관리자가 적용한 버그 수정 패치에서도 발생할 수 있습니다 .so

관련 정보