从内存加载动态库

Qix*_*Qix 5 c++ macos dll gcc module

是否可以从内存而不是从mac/gcc上的文件系统加载库?

使用Windows我正在使用MemoryModule,但它显然不是跨平台兼容的.

old*_*inb 7

首先,为此,我建议您使用读取OS X ABI动态加载程序参考.

为此,您必须使用NSCreateObjectFileImageFromMemory API.

给定指向内存中Mach-O文件的指针,此函数创建并返回一个NSObjectFileImage引用.当前实现仅适用于bundle,因此必须使用-bundle链接器选项构建Mach-O可执行文件.

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.

请注意,虽然这些函数已被弃用,但使用建议的替代dlopenet ,没有替代(据我所知).人.