【发布时间】:2018-08-03 07:08:28
【问题描述】:
我可以将我的所有文件编译为一个,然后从 C 中执行吗?在我的 lua 文件中,我使用了 require 和 dofile 函数。当我尝试使用 luac 进行编译然后我想执行编译后的文件时,它将无法找到我在编译文件中构建的模块。我认为通过 require 和 dofile 函数 luac 编译器过程包含 lua 文件,例如 javascript 编译器。简而言之,Javascript 编译器将导入文件添加到一个中。
当您发布应用程序时,将 lua 脚本放在一个文件中是一种好的做法吗?因为我有一些带有 lua 脚本的目录,所以当我发布时,我必须拥有所有具有可读形式二进制文件的 lua 文件。
【问题讨论】:
-
顺便说一句,在 LuaJIT(即 Lua 5.1,而不是您需要的 Lua 5.2)中,有一种方法可以将任何 Lua 模块编译为字节码并生成目标文件
luajit -b test.lua test.obj,它可以与您的主机应用程序链接用 C 语言编写,因此该模块存储在可执行文件中,并且可以通过require("test")访问,就好像该模块是通常的外部文件一样。 -
是的,我听说过 luajit,但如果你必须降级而不是升级到 lua5.3,我认为这是一个退步。或者您认为使用较旧的 lua 是一种好方法。
-
这取决于您真正需要什么:语言中的几个新功能或 3 倍速度。
-
诚实吗? 3倍速度。所以这让我信服。我会尝试它,只是我有点害怕迁移。谢谢
-
嗯,Luajit 的二进制/运行时也大得多(尽管与其他语言相比仍然很小),并且在 显着 更少的平台上编译 - 就像普通 Lua 在每个 C99 平台上编译一样