Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Build 如何在一个.exe文件中构建和链接Lua核心和几个Lua模块_Build_Lua_Static Linking - Fatal编程技术网

Build 如何在一个.exe文件中构建和链接Lua核心和几个Lua模块

Build 如何在一个.exe文件中构建和链接Lua核心和几个Lua模块,build,lua,static-linking,Build,Lua,Static Linking,我需要使便携式应用程序,将运行在Windows,Linux,MacOS和无需安装。它必须是一个可执行文件,而不是其他库文件(.dll、.so…)。我将使用ANSIC并为每个平台重新编译项目。我想使用Lua脚本,所以必须在代码中嵌入Lua解释器。我需要网络和一些其他模块来编写,但我现在知道Lua已经有了用于此目的的模块,所以我将使用它们来编写自己的模块。 我如何将所有这些链接在一起,Lua解释器,Lua模块(即luasock)在一个将加载.Lua脚本的可执行文件中。Lua有一个“require”系

我需要使便携式应用程序,将运行在Windows,Linux,MacOS和无需安装。它必须是一个可执行文件,而不是其他库文件(.dll、.so…)。我将使用ANSIC并为每个平台重新编译项目。我想使用Lua脚本,所以必须在代码中嵌入Lua解释器。我需要网络和一些其他模块来编写,但我现在知道Lua已经有了用于此目的的模块,所以我将使用它们来编写自己的模块。
我如何将所有这些链接在一起,Lua解释器,Lua模块(即luasock)在一个将加载.Lua脚本的可执行文件中。Lua有一个“require”系统,它希望找到.dll,所以我想知道我应该怎么做,仅仅调用没有“require”语句的函数就足够了。

我相信你不能这样做(我认为这样做是错误的)。可执行文件是特定于操作系统和机器的(在某些系统(如MacOSX)上,存在可执行文件,它们是针对同一操作系统的各种特定于机器的变体的混合)

拥有一个系统和机器“独立”程序的唯一方法本质上是将其定位于某个单一的通用“虚拟机”(广义上)。在您的例子中,这个VM是LuaVM(对于其他人来说,它可能是JavaVM,等等)。但是您必须假设您的用户拥有它,或者提供一个特定于机器和系统的

我个人不喜欢不可安装的应用程序(因为它不容易卸载)

你当然可以做到这一点(这并不是错的!),尽管这不是小事。Lua核心是为嵌入而设计的,您只需将Lua源代码包含到您自己的项目中,它就“正常工作”:

与模块的交易略有不同——没有多少模块适合直接嵌入。例如,这在以前和现在都已成功尝试过。基本思想是将模块的源代码嵌入到项目中,并将
luaopen_MODULE
函数插入到
包中。预加载['MODULE']
,以便
require
以后可以提取它

一种方法是查看已经嵌入Lua和其他库(如、和)的项目源

如果没有一个没有外部库的可执行文件的目标最终无法实现,那么您可以放松一点,转而使用便携式应用程序——一个在单个目录中独立于系统携带所有依赖项的应用程序。这就是设计的目的-您可以使用类似于Luarock的方法来安装Lua软件包。不同之处在于,这些包可以安装/部署到单独的目录中,其中也安装了所有必要的依赖项。这个目录(一个“dist”)是完全独立的,这意味着您可以将它移动到其他地方,它仍然可以工作


此外,我不喜欢需要安装的应用程序(因为它会在我的系统中放置文件)-卸载应该只是删除一个目录:)

不需要卸载未安装的应用程序。它应该可以通过简单地删除可执行文件来删除;或者,最多,如果它在自己的空目录中创建一些文件,请删除此目录。或者,应用程序本身可以提供自己的“卸载”。也许我不清楚。我将使用ANSIC并为每个平台重新编译项目。只是想有相同的来源。这应该是非常简单的。你试了什么?您的应用程序可以是一组C文件(
*.C
&
*.h
)和一组Lua文件(
*.Lua
)。您需要一个自述文件(或者可能是一个生成文件)来解释如何构建和使用它。把所有这些放在一个目录里。分发tar-ball或.zip存档。同样,您需要一个lua解释器(或JIT编译器)来使用应用程序提供的lua字节码。是的,这就是我在第一段中所说的-您可以将整个编译器和解释器包含到您的项目中。这是Lua编译的200KB的纯魔法:)嗯,我想我应该用外部模块开发我的应用程序,然后试着把所有东西都嵌入到一个二进制文件中。重新编译和嵌入Lua核心不是问题,只是模块,这有点问题。感谢链接到LuaDist!我注意到他们有一个项目,它将捆绑一个Lua文件——这不是个问题,但可以扩展。