Linux 动态库名称约定笔记
发布时间:2022-12-01 11:23:06 所属栏目:Linux 来源:
导读: 例:libgd.so.2.0.3
ldconfig 会在 /usr/lib 建立软链接,从动态库的 SONAME 链接到动态库文件本身,而且 ldconfig 也遵循版本的名称约定,当有多个同 SONAME 的库时选择排序最大的库建立软链接,例如同
ldconfig 会在 /usr/lib 建立软链接,从动态库的 SONAME 链接到动态库文件本身,而且 ldconfig 也遵循版本的名称约定,当有多个同 SONAME 的库时选择排序最大的库建立软链接,例如同
例:libgd.so.2.0.3 ldconfig 会在 /usr/lib 建立软链接,从动态库的 SONAME 链接到动态库文件本身,而且 ldconfig 也遵循版本的名称约定,当有多个同 SONAME 的库时选择排序最大的库建立软链接,例如同时存在 libgd.so.2.0.3 和 libgd.so.2.0.2,ldconfig 后 libgd.so.2 指向前者。 链接器在链接动态库的时候linux动态库,会检查 SONAME,而不是和文件的名称链接。即使你把 libgd.so.2.0.3 重命名为 libbar.so,链接得到的 elf solve 动态库时仍然查找 libgd.so.2。 这个机制用来把 minor/release version 和 API version 区分开,API version 写在 SONAME 中确保链接时不丢失 API version 的信息,minor/release version 作为真实名字(real name)。 库的 dev 包在安装后还会创建另一个软链接,名称为 linker name。这个软链接的意义在于让链接器查找:gcc foo.c -lgd 会搜索 libgd.so。(注意,非 dev 包不见得会安装这个链接) 软链接最终链接到 libgd.so.3.0.2,然后根据 SONAME,得到的 a.out 查找的是 libgd.so.2。 总结:linker name 在链接时起作用,soname 在运行时 solve 起作用,他们共同通过软链接的方式指向区分具体版本的动态库文件。 ref: tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html stackoverflow.com/questions/7553184/how-to-do-versioning-of-shared-library unix.stackexchange.com/questions/209710/why-cant-i-install-multiple-versions-of-a-shared-library (编辑:开发网_新乡站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐