从zip,内存等加载动态库

时间:2014-01-17 18:46:50

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

  • 从自定义包文件,zip文件中提取库,无论是临时位置(用户具有写入权限)
  • 照常加载图书馆(例如LoadLibrary()
  • 自己清理。

没有(AFAIK)平台无关,甚至是平台相关的直接从zip文件加载的方式,也不应该因为它有点利基。在其他地方提取,像往常一样加载。