与项目同时构建 Lua 脚本。

如何构建我的C++项目以在一个可执行文件中包含所有Lua文件?我不希望人们能够编辑Lua文件并改变游戏。

这是可能的吗,也是道德的吗?

点赞
用户3204551
用户3204551

你想把所有的 Lua 源码放进可执行文件里,所以你需要这个:

  • 一种将文件名映射到 Lua 文件的方式:

    char lua_files[]={
        "filename1\0filecontents1",
        "filename2\0filecontents2",
        0,
    };
    

    可以通过一个脚本在构建过程中自动生成,读取你的 Lua 文件目录。也可以选择预编译文件,这样你就可以将解析器从你的嵌入式 Lua 库中移除掉。

  • 自定义加载器:

    编写一个短小的 Lua C 函数,查找该数组并返回 load 和字符串形式的 Lua 字符串中发现的文件内容。

    将其放入 package.searchers 中进行注册。

如果你希望以后能够以某种方式加载自定义脚本,保留旧搜索器,并确保以某种方式要求不在你的源中的文件。

2014-04-05 19:15:29
用户1847592
用户1847592

使用 LuaJIT 的 " embedded bytecode" 特性:

要在您的应用程序中静态嵌入模块的字节码,生成一个目标文件并将其链接到您的应用程序中。

require() 尝试从导出的符号(在 Windows 上的 *.exe 或 lua51.dll 中)和 package.cpath 中的共享库中加载嵌入的字节码数据。

例如:

luajit -b test.lua test.obj                 # 生成目标文件
# 将 test.obj 与您的应用程序链接并使用 require("test") 加载它
2014-04-05 19:51:41