需要一个允许我从内存地址加载共享对象的API

时间:2015-04-14 21:10:18

标签: c shared-libraries ld dynamic-linking dlopen

dlopen原型: void * dlopen(const char * filename,int flag);

我需要的是: void * dlopen(const char * pBufferWithSoContents,int flag);

我不想将library.so存储在文件系统中。我想将它存储在内存缓冲区中,而不是存储在文件系统中。有人知道我可以使用的任何解决方案吗?

1 个答案:

答案 0 :(得分:0)

void *dlopen(const char *pBufferWithSoContents, int size, int flag) {

FILE* handle = fopen("lib.tmp", "w");

fwrite(pBufferWithSoContents, sizeof(char), size, handle);

fclose(handle);

void * ptr = dlopen("lib.tmp", flag);

remove("lib.tmp"); // Tmp file delete it.

return ptr;

}

我必须承认没有经过测试但基本上创建了一个tmp文件。你说它在内存中而不是在硬盘中暂时将它保存在磁盘上,使用dlopen posix调用加载它并只删除临时文件。