私はglibcのバージョン管理メカニズムをよく理解していません。
開発者は、ある時点で関数の新しいバージョンが必要であり、その関数がglibcで「逆互換」されなくなり、GLIBC_2.X
新しいバージョンを導入する必要があると判断しますか?
関数プロトタイプの変更やAPIの変更の場合は理解していますが、何らかの理由がありますか?
つまり、fnmatch:
readelf
glibc 2.19の出力を見ていますが、fnmatchの2つのバージョンが表示されます。
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にはなぜ2つのバージョンがありますか?開発者が機能の「新しいバージョン」をリリースする他の理由は何ですか?