![glibc에 동일한 기능의 두 가지 버전이 있는 이유는 무엇입니까? [폐쇄]](https://linux55.com/image/61218/glibc%EC%97%90%20%EB%8F%99%EC%9D%BC%ED%95%9C%20%EA%B8%B0%EB%8A%A5%EC%9D%98%20%EB%91%90%20%EA%B0%80%EC%A7%80%20%EB%B2%84%EC%A0%84%EC%9D%B4%20%EC%9E%88%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%ED%8F%90%EC%87%84%5D.png)
나는 glibc의 버전 제어 메커니즘을 잘 이해하지 못합니다.
개발자는 어떤 시점에서 함수의 새 버전이 필요하고 해당 함수가 glibc에서 더 이상 "역호환"되지 않으며 GLIBC_2.X
새 버전을 도입해야 한다고 결정합니까?
함수 프로토타입 변경이나 API 변경의 경우는 이해하지만, 또 어떤 이유가 있나요?
즉, fnmatch:
readelf
glibc 2.19의 출력을 보고 있는데 fnmatch의 두 가지 버전이 표시됩니다.
151: 000bff40 892 FUNC GLOBAL DEFAULT 12 fnmatch@GLIBC_2.0
152: 000bff40 892 FUNC GLOBAL DEFAULT 12 fnmatch@@GLIBC_2.2.3
하지만 glibc 코드를 보면 정확히 동일한 기능임을 알 수 있습니다.
versioned_symbol (libc, __fnmatch, fnmatch, GLIBC_2_2_3);
# if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_2_3)
strong_alias (__fnmatch, __fnmatch_old)
compat_symbol (libc, __fnmatch_old, fnmatch, GLIBC_2_0);
# endif
그렇다면 fnmatch에는 왜 두 가지 버전이 있습니까? 개발자가 기능의 "새 버전"을 출시하는 다른 이유는 무엇입니까?