dlopen原型: void * dlopen(const char * filename,int flag);需要一個允許我從內存地址加載共享對象的API
我需要的是: void * dlopen(const char * pBufferWithSoContents,int flag);
我不想將library.so存儲在文件系統中。我想將它存儲在內存緩衝區中,而不是在文件系統中。任何人都知道我可以使用任何解決方案?
dlopen原型: void * dlopen(const char * filename,int flag);需要一個允許我從內存地址加載共享對象的API
我需要的是: void * dlopen(const char * pBufferWithSoContents,int flag);
我不想將library.so存儲在文件系統中。我想將它存儲在內存緩衝區中,而不是在文件系統中。任何人都知道我可以使用任何解決方案?
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調用加載它,只是刪除臨時文件。
儘管簡單,但您仍然通過存儲lib.tmp將文件寫入文件系統。 – MatchPoint
這就是你無法將它加載到內存中的一點。如果你能回答我的問題,爲什麼你不能暫時將它存儲在磁盤上?有一些性能增益,我不認爲不會。 –
你有文件系統嗎?你有沒有嘗試將你的數據寫入臨時文件並使用dlopen? –
我有一個文件系統,但我不想使用它。這是一個專門的用例。 – MatchPoint
你也可以靜態鏈接它,這是你基本上描述的?告訴我爲什麼你不能只是靜態鏈接,這意味着代碼成爲可執行文件的一部分。 –