【问题标题】:load dynamic library from zip,memory etc从 zip、内存等加载动态库
【发布时间】:2014-01-17 18:46:50
【问题描述】:

有没有办法从 zip 文件、内存或自定义包文件中加载动态库(so 或 dll)?还是我在浪费时间?我在互联网上找不到任何关于它的信息。

[编辑] 澄清:我正在寻找使用 LoadLibraryEx(适用于 Windows)或 dlopen(适用于 Linux)的动态库的运行时加载。我可以轻松地从目录加载对象,但我想知道是否有办法将共享/动态库放在 ZIP 文件中并从该文件中加载。

【问题讨论】:

  • 你的目标是什么?您想解压缩文件并在同一个程序中使用该库吗?您需要使用 -l 标志编译程序才能使用库。
  • 我想在运行时加载库,使用“LoadLibraryEx”或“dlopen”

标签: c++ shared-libraries dynamic-linking


【解决方案1】:

是的。请注意,加载库取决于平台(例如,Windows 使用 LoadLibrary()dlopen 调用)。在 Windows 上它们是DLLs,在 *NIX 上是.SOs。不过这并不难,您可以将实际的实现细节抽象为特定于平台的类,这正是许多 C++ 插件架构所做的,以允许程序在运行时动态加载模块。

至于您问题的第二部分,虽然我不确定内存部分,但.zip 文件部分肯定只是使用 Api 将所述库从 zip 文件中提取到临时位置的情况然后从那里动态加载库?对于自定义包文件也是如此,您只需分离关注点,即:

  • 将库从自定义包文件、zip 文件中提取到临时位置(用户具有写入权限的位置)
  • 像往常一样加载库(例如LoadLibrary()
  • 自己清理干净。

没有(AFAIK)平台不可知论,甚至是平台相关的直接从 zip 文件加载的方式,也不应该存在,因为它有点小众。在其他地方提取,照常加载。

【讨论】:

    猜你喜欢
    • 2012-08-03
    • 2015-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 2011-01-05
    • 2011-01-28
    相关资源
    最近更新 更多