同步操作将从 deepinwiki/wiki 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
[TOC]
在windows中叫dll的技术,同样在linux也有类似的技术。相比 windows 而言,linux 对动态加载可以更加轻易的管理(当然也包括更容易出错)。在 linux 中,很多人都会遇到更新 libc 出现系统崩溃,完全无法用的情况。这是因为 libc 库是几乎所有程序共享的程序库。
# 查看程序依赖的共享库
ldd /bin/ln
# 显示:
linux-vdso.so.1 (0x00007ffca95e9000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f76c4b18000)
/lib64/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x00007f76c4d36000)
## 替代方案
objdump -p /bin/ln |grep NEEDED
小括号的十六进制数是共享库在当前程序加载的内存位置(因此是会变化的)。
其中, linux-vdso 是个系统虚拟库,它只存在运行的程序中,目的是虚拟调用接口的实现(中断或者高速系统调用)。
libc 是 c 语言的运行库,而 c 语言是很多程序的开发语言,或者间接调用的基本库。
/lib64/ld-linux 是动态加载器(实际是一个程序,而不是一个库),也就是通过这个来管理共享库的加载,这是一个绝对路径。而其他是名字,就是程序在链接的时候只会绑定名字,而管理器就提供配置的机制,让名字和具体的路径绑定起来。
共享库命名是有讲究的,linux 约定库应该用以下命名规则:
这种命名叫“soname”,其他程序链接使用的时候,只需要给出名字部分即可。
在编译共享库时可以设定 soname,soname 会匹配一个 libxxx.so 的链接(或 ld 脚本),指向真实的文件名。
如: soname(libc.so.6) --> link(libc.so) --> file(libc-2.31.so)。
# 直接使用 加载器
# 该用法和 ldd 效果类似
/lib64/ld-linux-x86-64.so.2 --list /bin/ln
共享库的配置文件:
其中 ld.so.cache 由 ldconfig 程序对 ld.so.conf 配置的路径进行预处理的结果。也就是当用 ld.so.conf 配置完新的路径,由管理员账户执行 ldconfig 才可以让路径生效。
# 查找 ld.so.conf 配置路径下所有的共享库,生成缓存 ld.so.cache
sudo ldconfig
# 打印当前缓存的共享库路径信息
ldconfig -p
临时增加搜索路径:
# 使用环境变量 LD_LIBRARY_PATH
LD_LIBRARY_PATH=/opt/lib ldd /lib/ln
向上兼容(向前兼容,前指未来),低版本兼容高版本。当新版没有增加新接口,或者减少接口时,老版本可以向上兼容新版本。
向下兼容(向后兼容,后指落后),高版本兼容低版本。比如新版本提供旧版本所有的 api,并增加一些新的接口。这样就可以用新版本共享库替代旧版本共享库来使用。这是比较常见的。
兼容是精心设计的结果。比较理想的升级方案是大版本不提供向下兼容,小版本提供向下兼容,修订版本支持上下兼容。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。