是否有可能从内存而不是从MAC / gcc的文件系统加载一个库?
与Windows我使用MemoryModule但它显然不是跨平台兼容。
是否有可能从内存而不是从MAC / gcc的文件系统加载一个库?
与Windows我使用MemoryModule但它显然不是跨平台兼容。
第一件事首先,要做到这一点,我建议你使用阅读OS X ABI动态加载程序参考 。
要做到这一点,你必须使用NSCreateObjectFileImageFromMemory API。
给定的指针在存储器中的Mach-O的文件,该函数创建并返回一个
NSObjectFileImage
参考。 当前实现仅适用于捆绑,所以你必须使用建立的Mach-O可执行文件-bundle
连接选项。该存储器块
address
到,必须被分配点vm_allocate
(/usr/include/mach/vm_map.h
)。
确保由要求遵守vm_allocate
用于包含该模块的存储块。
一旦你掌握了目标文件图像,您必须使用NSLinkModule功能模块链接到该程序。
当你调用这个函数,通过给定的模块引用的所有库添加到库搜索列表。 除非你通过
NSLINKMODULE_OPTION_PRIVATE
,NSLinkModule
添加模块全局符号列表中的所有全局符号。
连接后,不要忘记通过调用清理NSDestroyObjectFileImage功能。
当这个函数被调用时,动态加载程序调用
vm_deallocate
(/usr/include/mach/vm_map.h
)在内存中指出objectFileImage
参数。
请注意,虽然这些功能已被弃用,存在使用建议的替代不可替代的(据我所知) dlopen
等。 人。