这就是我的困境:我正在使用PhysFS,它允许我将多个目录和档案视为一个虚拟目录。这是一个未来的视频游戏,我打算使它更友好。 PhysFS是使其适应模块化的最佳方式。
与此同时,我还打算使用一种类型的脚本扩展器,它可以加载库并在Lua中注册它们。 I already created a crude, makeshift, largerly proof-of-concept Lua script extender
那么我的问题是什么?我的问题是 dlopen / LoadLibrary 仅适用于真实文件系统上的文件。我想通过PhysFS加载。我通过PHYSFS_openRead加载文件,然后使用PHYSFS_read将文件的全部内容加载到内存缓冲区中。
有些人建议将 .so / .dll 文件从PhysFS加载到内存中,然后将其写入Linux中的/ tmp或Windows中的C:\ temp,然后dlopen-它。 但我不认为这是一种非常优雅的方式。
那么......还有其他想法吗?我确实调查了mmap,并认为我可以手动加载ELF文件(在Linux上)并以某种方式手动提取函数,最后将它们注册为Lua,但到目前为止,{{ 3}}
人们说我应该调查all I could produce was a program that gave me information about the elf,但我不确定这对我有什么帮助。
那我该怎么办?如何通过PhysFS将库加载到内存中,并使用替代dlopen 来... dlsym中的函数?
请不要建议dlopen,除非你真的建议我暂时写出文件。
我的问题更大:我如何链接?如何从库中获取已存在的功能?为什么有些人会向我建议LibJIT?