gpt4 book ai didi

c - dlopen 与标准动态链接的用例是什么?

转载 作者:行者123 更新时间:2023-12-04 13:28:28 26 4
gpt4 key购买 nike

根据文档,dlopendlsym 结合使用加载库,并获取指向符号的指针。

但这已经是动态加载器/链接器所做的。
而且,这两种方法都是基于ld.so .

使用 dlopen 时实际上似乎有两个不同之处:

  • 该库可以有条件地加载。
  • 编译器不知道我们正在使用的符号(类型、原型(prototype)......),因此不会检查潜在的错误。顺便说一句,这是一种实现自省(introspection)的方法。

  • 但是,它似乎并没有激发使用 dlopen超过标准负载,除了边缘示例:
  • 就内存占用优化而言,当共享库已被另一个程序使用时,条件加载并不是很有趣:加载已使用的库不会增加内存占用。
  • 避免编译器监督是不安全的,也是编写错误的好方法……我们也错过了潜在的编译器优化。

  • 那么, dlopen 还有其他用途吗?优于标准动态链接/加载?

    最佳答案

    So, are there other uses where dlopen is prefered over the standard dynamic linking/loading?



    使用 dlopen 的典型用例是
  • 插件
  • 为当前 CPU 选择最佳实现(英特尔数学库执行此操作)
  • 选择不同供应商的 API 实现(GLEW 和其他 OpenGL 包装器执行此操作)
  • 如果不太可能使用共享库,则延迟加载(这将加快启动,因为库构造函数不会运行 + 运行时链接器要做的工作会稍微少一些)

  • Avoiding the compiler supervision is unsafe and a good way to write bugs... We're also missing the potential compiler optimizations.



    确实如此,但您可以通过在延迟加载的共享库周围提供一个小型包装库来实现两全其美。在 Windows 上,这是通过标准工具完成的(谷歌为“DLL 导入库”),在 Linux 上,您可以手动完成或使用 Implib.so .

    关于c - dlopen 与标准动态链接的用例是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45388186/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com