【发布时间】:2017-07-29 10:30:24
【问题描述】:
根据文档,dlopen 与dlsym 结合使用以加载库,并获取指向符号的指针。
但这已经是动态加载器/链接器所做的。 而且,这两种方法都基于ld.so。
使用dlopen时实际上似乎有两个不同之处:
- 可以有条件地加载该库。
- 编译器不知道我们正在使用的符号(类型、原型...),因此不会检查潜在的错误。顺便说一句,这是一种实现自省的方法。
但是,除了边缘示例之外,它似乎并没有促使使用dlopen 超过标准加载:
- 就内存占用优化而言,当共享库已被另一个程序使用时,条件加载并不是很有趣:加载已使用的库不会增加内存占用。
- 避免编译器监督是不安全的,也是编写错误的好方法...我们还缺少潜在的编译器优化。
那么,与标准动态链接/加载相比,dlopen 是否还有其他用途?
【问题讨论】:
-
想想插件和类似的东西。
-
模块化和插件?作为一种使用新功能动态扩展程序的方法。或者作为一种在运行时检测某些功能然后加载正确的库来处理它的方法(游戏或 3d 引擎的典型用例)。
-
@Someprogrammerdude 这应该是答案。
标签: c shared-libraries dynamic-linking