有没有办法从zip文件,内存或自定义包文件加载动态库(so或dll);还是我在浪费时间?我在互联网上找不到任何关于它的内容。
[编辑]澄清:我正在寻找动态库的运行时加载使用LoadLibraryEx
(对于Windows)或dlopen
(对于Linux)。我可以轻松地从目录加载对象,但我想知道是否有办法将共享/动态库放在ZIP文件中并从该文件中加载它。
答案 0 :(得分:1)
是。请注意,加载库与平台有关(例如,Windows使用LoadLibrary()
,dlopen
调用)。在Windows上,它们是DLLs
,而在* NIX,.SO
s。但这并不困难,您可以将实际的实现细节抽象为特定于平台的类,这正是许多C ++插件架构允许程序在运行时动态加载模块所做的事情。
至于你问题的第二部分,虽然我不确定内存部分,但.zip
文件部分肯定只是使用Api将所述库从zip文件中提取到a临时位置,然后从那里动态加载库?对于自定义包文件也是如此,您只需要分离关注点,即:
LoadLibrary()
)没有(AFAIK)平台无关,甚至是平台相关的直接从zip文件加载的方式,也不应该因为它有点利基。在其他地方提取,像往常一样加载。