滁州网站建设梦天堂,设计公司职位,苏州北京商场网站建设,seo技巧课程前言 musl ldso 是按照什么次序加载动态链接的应用程序的共享库的#xff1f;如果共享库之间有依赖#xff0c; musl ldso 如何处理先初始化哪个 共享库#xff1f; musl ldso 的代码可以在 musl 官方代码#xff1a; ldso\dlstart.c 与 ldso\dynlink.c#xff0c;其中动…前言 musl ldso 是按照什么次序加载动态链接的应用程序的共享库的如果共享库之间有依赖 musl ldso 如何处理先初始化哪个 共享库 musl ldso 的代码可以在 musl 官方代码 ldso\dlstart.c 与 ldso\dynlink.c其中动态库加载部分主要在 ldso\dynlink.c 中的 load_library 函数中实现。
动态库加载次序
当前 musl ldso 加载次序 与 readelf -d xx.so 依赖动态库列表显示的一致这个加载次序是链接时的依赖库的次序。如果想调整这个次序就调整链接时的各个依赖库的先后次序即可 动态库的加载次序是按次序把依赖的动态库加载到内存这个次序依次加载大部分情况下不重要 如果两个没有依赖的共享库需要加载动态库的初始化有先后的次序关系建议调整链接时的动态库的先后次序让需要先初始化的动态库放在前面左边 依赖库初始化次序这个重要被依赖的先初始化musl ldso 的设计满足这个要求比如 A-B-C则动态库初始化次序是C-B-A。 库的初始化次序
两个动态库之间是否有依赖关系在库的依赖列表中体现。 多次库依赖初始化最后端的依赖库 如 A-B-C初始化次序是 C-B-A 如果两个库无依赖初始化次序按照 应用程序依赖库的列表次序进行初始化 可以库的调整链接次序调整两个两组不相互依赖库的初始化次序 调整链接时的动态库的次序把 lib1 放在前面则会先初始化 lib1 依赖的 lib3。所以初始化次序可以调整链接时的动态库的位置调整。 小结 验证 musl ldso 的动态库加载可以借助 gdb 调试 与 增加 LOG 打印的方式 当前 musl ldso 的动态库加载虽然集成在 musl libc.so 中但是功能依旧是完整、齐全的 可以通过查看 musl 的代码熟悉 ldso 动态加载的流程与实现方法