我需要制作可在
Windows,Linux,MacOS上运行的便携式应用程序,无需安装.它必须是一个可执行文件,而不是其他库文件(.dll,.so …).我将使用ANSI C并为每个平台重新编译项目.我想使用Lua脚本,所以必须在我的代码中嵌入Lua解释器.我需要网络和一些其他模块来编写,但我现在Lua已经有了用于此目的的模块,所以我将使用它们而不是编写我自己的模块.
如何将所有这些链接在一起,Lua解释器,Lua模块(LuaSocks ie)在一个可加载.lua脚本的可执行文件中. Lua有“require”系统需要.dll来查找,所以我想知道我应该做什么,只是在没有“require”语句的情况下调用函数就足够了.
如何将所有这些链接在一起,Lua解释器,Lua模块(LuaSocks ie)在一个可加载.lua脚本的可执行文件中. Lua有“require”系统需要.dll来查找,所以我想知道我应该做什么,只是在没有“require”语句的情况下调用函数就足够了.
解决方法
你当然可以做到这一点(并没有错!),虽然它不是微不足道的. Lua核心是为了嵌入而设计的,你可以将Lua源包含到你自己的项目中并且“只是工作”:).
这个交易与模块略有不同 – 其中很多都不适合直接嵌入.例如,已经成功尝试了LuaSocket之前和asked here.基本思路是将MODULE的源代码嵌入到项目中并将luaopen_MODULE函数插入到package.preload [‘MODULE’]中,以便需要它可以获取它后来.
一种方法是查看已经嵌入Lua和其他库的项目源,如LÖVE,MurgaLua和Scrupp.
如果没有一个没有外部库的单个可执行文件的目标无法实现,你可以放松一点,转而使用便携式应用程序 – 一个独立于系统的应用程序,它将所有它依赖于它,在一个目录中.这就是LuaDist的设计目的 – 您使用它类似于LuaRocks来安装Lua软件包.不同之处在于,这些软件包可以安装/部署到一个单独的目录中,其中也安装了所有必需的依赖项.这个目录(“dist”)是完全独立的,这意味着你可以将它移动到其他地方,它仍然可以工作.