2015-04-14 34 views
0

dlopen原型: void * dlopen(const char * filename,int flag);需要一個允許我從內存地址加載共享對象的API

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

我不想將library.so存儲在文件系統中。我想將它存儲在內存緩衝區中,而不是在文件系統中。任何人都知道我可以使用任何解決方案?

+0

你有文件系統嗎?你有沒有嘗試將你的數據寫入臨時文件並使用dlopen? –

+0

我有一個文件系統,但我不想使用它。這是一個專門的用例。 – MatchPoint

+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調用加載它,只是刪除臨時文件。

+0

儘管簡單,但您仍然通過存儲lib.tmp將文件寫入文件系統。 – MatchPoint

+0

這就是你無法將它加載到內存中的一點。如果你能回答我的問題,爲什麼你不能暫時將它存儲在磁盤上?有一些性能增益,我不認爲不會。 –