0

这是我的困境:我正在使用PhysFS,它允许我将多个目录和档案视为一个虚拟目录。这是针对未来的视频游戏,我打算让 modder 友好。PhysFS 是使其易于修改的最佳方式。

同时,我还打算使用一种脚本扩展器,它可以动态加载库并在 Lua 中注册它们。我已经创建了一个粗糙的、临时的、更大的概念验证 Lua 脚本扩展器

那么我的问题是什么?我的问题是dlopen / LoadLibrary仅适用于真实文件系统上的文件。我想通过 PhysFS 加载。我通过 PHYSFS_openRead 加载文件,然后使用 PHYSFS_read 将文件的全部内容加载到内存缓冲区中。

有人建议将.so / .dll文件从 PhysFS 加载到内存中,然后将其写入 Linux 中的 /tmp 或 Windows 中的 C:\temp,然后 dlopen 。但我不认为这是一种非常优雅的方式。

那么……还有其他想法吗?我确实查看了mmap并认为也许我可以手动加载 ELF 文件(在 Linux 上)并以某种方式手动提取函数,最后为 Lua 注册它们,但到目前为止,我能生成的只是一个程序,它给了我关于精灵

人们说我应该研究LibJIT,但我不确定这对我有什么帮助。

所以我该怎么做?如何通过 PhysFS 将库加载到内存中,并使用dlopen 的替代方法... dlsym 从中提取函数?

请不要建议dlopen,除非你真的建议我暂时写出文件。

我的问题更大:我如何链接?如何从我已经在内存中的库中获取函数?为什么有些人向我推荐LibJIT

4

0 回答 0