根据文档,dlopen与dlsym
一起使用来加载库,并获取指向符号的指针。dlopen vs标准动态链接的用例是什么?
但是,这已经是动态加载器/链接器所做的。此外,这两种方法都基于ld.so。
有实际上似乎使用dlopen
时是两个区别:
- 库可以有条件地加载。
- 编译器不知道我们正在使用的符号(类型,原型...),因此不检查潜在的错误。顺便说一句,这是实现自省的一种方式。
但是,这似乎并没有激发了标准装载使用dlopen
,除了边缘的例子:
- 有条件的装载是不是真的很有趣,在内存占用优化方面当共享库已被其他程序使用:加载已使用的库不会增加内存占用量。
- 避免编译器监督是不安全的,也是编写错误的好方法......我们也忽略了潜在的编译器优化。
那么,有没有其他的用途,其中dlopen
是首选的标准动态链接/加载?
认为插件和类似的东西。 – Mat
模块化和插件?作为使用新功能动态扩展程序的一种方式。或者作为在运行时检测某些功能的方法,然后加载正确的库来处理(游戏或3D引擎的典型用例)。 –
@Someprogrammerdude这应该是答案。 – yugr