在项目旁边构建Lua脚本

时间:2014-04-05 19:07:54

标签: c++ lua

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

是否可能,是否符合道德标准?

2 个答案:

答案 0 :(得分:2)

使用" embedded bytecode" LuaJIT的特点:

  

要在应用程序中静态嵌入模块的字节码,请生成目标文件,然后将其与应用程序链接。

     

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

示例:

luajit -b test.lua test.obj                 # Generate object file
# Link test.obj with your application and load it with require("test")

答案 1 :(得分:1)

好吧,你想把所有Lua源都放到你的可执行文件中,所以你需要这个:

  • 将文件名映射到Lua文件的方法:

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

    这可以通过在构建时读取Lua文件目录的脚本自动创建 或者,它甚至可以预编译文件,因此您可以从嵌入的Lua库中删除解析器。

  • 自定义装载机:
    编写一个简短的Lua C函数,它搜索数组并返回load和一个包含找到的文件内容的字符串作为Lua字符串。
    通过将其放入package.searchers
  • 进行注册

如果您以后想以某种方式允许加载自定义脚本,请保留旧搜索者并确保您以某种方式需要不在源中的文件。