ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# 安装 Lua Lua 以 [源代码](http://www.lua.org/ftp/) 的形式发布,使用之前,你需要构建它。 构建 Lua 非常简单,因为 Lua 是用纯粹的 ANSI C 实现的,在所有具备 ANSI C 编译器的平台都可以直接编译。 同时,Lua 也可以直接以 C++ 形式编译。 下面介绍了类 Unix 平台上的构建流程,另有 [其它系统构建介绍](#other) 与 [配置选项](#customization) 以作参考。 如果你没有时间或兴趣自己编译 Lua, 可以从 [LuaBinaries](http://lua-users.org/wiki/LuaBinaries) 获取编译后的二进制文件 或者从 [LuaDist](http://luadist.org/) 这里获取 Lua 的多平台发布版(自带电池)。 ### 构建 Lua 在大多数类 Unix 平台上,输入 "`make`" 加上合适的平台名即可。步骤如下: 1. 打开一个控制台窗口,切换到 `lua-5.3.0` 目录。 目录下的 `Makefile` 文件内包含了构建与安装流程。 2. 运行 "`make`" 并查看你的平台是否列在其中。 当前支持的平台有: aix bsd c89 freebsd generic linux macosx mingw posix solaris 如果你的平台在其中,运行 "`make xxx`" 即可,xxx 代表你的平台名。 如果你的平台不在其中,先尝试最相近的平台,再按 posix generic c89 顺序依次尝试。 3. 编译过程很短,最终在 `src` 目录下生成三个文件: lua (解释器), luac (编译器)和 liblua.a (静态库) 。 4. 构建完成后,可以运行 "`make test`" 来检查是否成功。 它会运行解释器并打印版本号。 如果你是 Linux 系统并出现了编译错误,请确认你是否安装了 `readline` (也可能叫 `libreadline-dev` 或者 `readline-devel`)开发包。 之后,如果还有链接错误,尝试 "`make linux MYLIBS=-ltermcap`" 。 ### 安装 Lua 一旦你构建完毕,可能希望把 Lua 安装到系统默认位置, 那么执行 "`make install`" 即可。 系统默认位置以及如何安装都定义在 `Makefile` 中。 这个过程可能需要有相关的权限。 运行 "`make xxx install`" 可以构建和安装一步到位,xxx 指你的平台名。 如果你想把 Lua 安装在本地,运行 "`make local`"。 它会创建一个 `install` 目录,内有 `bin`, `include`, `lib`, `man`, `share`, 子目录,并将下列文件安装在其中。 如果你想安装到本地其它目录, 运行 "`make install INSTALL_TOP=xxx`",xxx 指你选择的目录。 由于安装过程中会切换到 `src` 以及 `doc` 目录进行, 所以当 `INSTALL_TOP` 不是绝对路径时务必小心。 ``` bin: lua luac include: lauxlib.h lua.h lua.hpp luaconf.h lualib.h lib: liblua.a man/man1: lua.1 luac.1 ``` 这些是开发时需要的目录。 如果你仅仅想运行一些 Lua 程序, 那么只需要 `bin` 和 `man` 下的文件。 `include` 和 `lib` 下的文件用于将 Lua 嵌入 C 或 C++ 程序。 ### 定制 有三类定制,可以通过编辑文件完成: * 怎样安装 Lua 以及安装到哪里 — 编辑 `Makefile`。 * 怎样构建 Lua — 编辑 `src/Makefile`。 * Lua 特性 — 编辑 `src/luaconf.h`。 其实你不必编辑 Makefile 文件,make 的时候在命令行指定相关变量即可。 当然,编辑保存 Makefile 可以给定制留个记录。 另一方面,如果你需要定制一些 Lua 特性,那就需要在构建安装 Lua 前 编辑 `src/luaconf.h` 。 编辑过的文件必须确保一致性,也就是只安装在一个地方, 让所有你编译出来的用到 Lua 的程序都使用这唯一的这一份。 专家可以通过编辑 Lua 源代码来定制更多的东西。 ### 在其它系统上构建 Lua 如果你不使用常规的 Unix 工具,那么构建 Lua 的流程就取决于你使用的编译器。 你需要创建若干工程来构建库,解释器以及编译器等。请把下列源文件加入相关工程: 库: + lapi.c + lcode.c + lctype.c + ldebug.c + ldo.c + ldump.c + lfunc.c + lgc.c + llex.c + lmem.c + lobject.c + lopcodes.c + lparser.c + lstate.c + lstring.c + ltable.c + ltm.c + lundump.c + lvm.c + lzio.c + lauxlib.c + lbaselib.c + lbitlib.c + lcorolib.c + ldblib.c + liolib.c + lmathlib.c + loslib.c + lstrlib.c + ltablib.c + lutf8lib.c + loadlib.c + linit.c 解释器: library, lua.c 编译器: library, luac.c 把 Lua 以一个库形式用于你的程序,你需要知道如何用你的编译器创建库和使用库。 比如,以动态加载的 C 库形式使用 Lua,你需要了解如何创建动态库并让 Lua API 函数 在动态库中可见 — _不要_ 将 Lua 库链入每个动态库。 在 Unix 下,我们建议把 Lua 库静态链入宿主程序,然后将符号导出用于动态链接; `src/Makefile` 就是这样处理 Lua 解释器的。 在 Windows 下,我们建议把 Lua 库编译成一个 DLL 。 无论怎样,编译器 luac 都应该静态链接。 正如上面所述,你可以在构建 Lua 前编辑 `src/luaconf.h` 以定制一些特性。