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