这几天安装luarocks时候遇到不少坑,这里记录一下。吐槽一下,网上教程一堆,实际安装和使用时候,会出现各种奇奇怪怪的问题,包括lua的官网,也是奇葩,安装包下载写的不明不白。

我打算安装lua 5.1,好吧,进入官网https://lua.org,进入下载界面,有源码编译安装,显然太麻烦了,我需要二进制安装包安装。

alt text

进入下载页面之后,寻找lua 5.1版本,千万不要去History栏目下面找,直接使用Lua for Windows版本

alt text 我把下载地址直接贴在这里:luaforwindows download

下载后直接安装,例如我的安装目录:D:\Lua\5.1。Lua的安装目录会自动被加入了环境变量。

安装后,可以进入CMD查看一下。

1C:\Users\Admin>lua
2Lua 5.1.5  Copyright (C) 1994-2012 Lua.org, PUC-Rio
3>

至此,Lua 5.1 版本安装完毕。接下来安装Luarocks。

什么是Luarocks?Luarocks是Lua包的管理仓库,类似于Java的Maven。官网:luarocks.org。Windows下官网安装说明如下: Installation-instructions-for-Windows,有空了仔细看一下。

首先说明一点,Lua 5.1目录中其实已经自带了Luarocks 2.0.2版本,但是比较老旧,重点是安装带有C程序的模块时,会依赖VS Studio进行编译,我不可能去安装个VS Studio这个庞然大物,平时不做C++的也用不着。这里我选择安装Luarocks 3.7版本,选择最新的版本应该也可以的。

Luarocks Download

需要特别注意,luarocks-3.7.0-windows-64.zip和luarocks-3.7.0-windows-32.zip是64位和32位All-in-one版本,里面就两个可执行文件,新手不建议选择这种安装,不然后续配置起来会懵逼。建议选择带-win32后缀的luarocks-3.7.0-win32.zip ,下载地址:https://luarocks.github.io/luarocks/releases/luarocks-3.7.0-win32.zip

下载luarocks-3.7.0-win32.zip后解压缩,进入luarocks-3.7.0-win32目录,打开CMD控制台执行如下安装指令:

1.\install.bat /F /MW /LUA "D:\Lua\5.1"  /P "D:\luarocks-3.7.0" /NOADMIN /SELFCONTAINED /Q

这里:

  • D:\Lua\5.1表示Lua的安装目录
  • D:\luarocks-3.7.0表示打算把Lua安装到什么地方,请注意luarocks-3.7.0-win32.zip本身并不是Luarock包,而是辅助安装luarocks的
  • /MW表示使用MinGW作为GCC的编译程序,所以,其实应该先安装MinGW。此处暂停一下,我们先安装MinGW。

我们来安装MinGW,这里是详细的安装教程:MinGW C++ Download and Installation,这里简单说明一下。

  1. 下载MinGW安装管理器,用于下载各个版本的MinGW。进入下载页面:

https://sourceforge.net/projects/mingw/files/,点击Download mingw-get-setup.exe链接。 Download mingw-get-setup.exe

  1. 下载mingw-get-setup.exe,按照提示一步一步安装即可。安装成功后打开软件,选中下面这三个选项:mingw32-base, mingw32-gcc=g++, msys-base(我没有选择这个),分别右键选择Mark for selection。

alt text alt text

然后,选择菜单栏的Installation下面的Apply Changes菜单项,弹出一个安装确认框,选中Apply进行安装。紧接着耐心等待安装成功。

  1. 最后把Mingw的bin目录添加到Windows的Path环境变量中,然后打开CMD控制台,验证GCC:
1C:\Users\Admin>gcc -v
2Using built-in specs.
3COLLECT_GCC=gcc
4COLLECT_LTO_WRAPPER=d:/mingw/bin/../libexec/gcc/mingw32/6.3.0/lto-wrapper.exe
5Target: mingw32
6Configured with: ../src/gcc-6.3.0/configure --build=x86_64-pc-linux-gnu --host=mingw32 --target=mingw32 --with-gmp=/mingw --with-mpfr --with-mpc=/mingw --with-isl=/mingw --prefix=/mingw --disable-win32-registry --with-arch=i586 --with-tune=generic --enable-languages=c,c++,objc,obj-c++,fortran,ada --with-pkgversion='MinGW.org GCC-6.3.0-1' --enable-static --enable-shared --enable-threads --with-dwarf2 --disable-sjlj-exceptions --enable-version-specific-runtime-libs --with-libiconv-prefix=/mingw --with-libintl-prefix=/mingw --enable-libstdcxx-debug --enable-libgomp --disable-libvtv --enable-nls
7Thread model: win32
8gcc version 6.3.0 (MinGW.org GCC-6.3.0-1)

至此MinGW安装完毕。

继续安装Luarocks,进入luarocks-3.7.0-win32目录,执行安装命令:

1.\install.bat /F /MW /LUA "D:\Lua\5.1"  /P "D:\luarocks-3.7.0" /NOADMIN /SELFCONTAINED /Q

安装成功会如下显示:

 1
 2PS D:\luarocks-3.7.0-win32> .\install.bat /F /MW /LUA "D:\Lua\5.1"  /P "D:\luarocks-3.7.0" /NOADMIN /SELFCONTAINED /Q
 3
 4D:\luarocks-3.7.0-win32>rem=rem --[[--lua
 5LuaRocks 3.7.x installer.
 6
 7
 8========================
 9== Checking system... ==
10========================
11
12
13Attempting to install without admin privileges...
14Looking for Lua interpreter
15    checking D:\Lua\5.1
16       Found lua.exe, testing it...
17Interpreter found, now looking for link libraries...
18    checking for D:\Lua\5.1\lua5.1.lib
19    checking for D:\Lua\5.1\lua51.lib
20    checking for D:\Lua\5.1\lua5.1.dll
21       Found lua5.1.dll
22Link library found, now looking for headers...
23    checking for D:\Lua\5.1\include\lua\5.1\lua.h
24    checking for D:\Lua\5.1\include\lua51\lua.h
25    checking for D:\Lua\5.1\include\lua5.1\lua.h
26    checking for D:\Lua\5.1\include\lua.h
27       Found lua.h
28Headers found, checking runtime to use...
29    D:\Lua\5.1\lua.exe uses MSVCR80.DLL as runtime
30Runtime check completed.
31arch: 14c -> IMAGE_FILE_MACHINE_I386
32
33==========================
34== System check results ==
35==========================
36
37Will configure LuaRocks with the following paths:
38LuaRocks        : D:\luarocks-3.7.0
39Config file     : D:\luarocks-3.7.0\config-5.1.lua
40Rocktree        : D:\luarocks-3.7.0\systree
41
42Lua interpreter : D:\Lua\5.1\lua.exe
43    binaries    : D:\Lua\5.1
44    libraries   : D:\Lua\5.1
45    includes    : D:\Lua\5.1\include
46    architecture: x86
47    binary link : lua5.1.dll with runtime MSVCR80.dll
48
49Compiler        : MinGW/gcc (make sure it is in your path before using LuaRocks)
50                  in: D:\MinGW\bin
51
52============================
53== Installing LuaRocks... ==
54============================
55
56
57Removing D:\luarocks-3.7.0...
58
59Installing LuaRocks in D:\luarocks-3.7.0...
60Created LuaRocks command: D:\luarocks-3.7.0\luarocks.bat
61Created LuaRocks command: D:\luarocks-3.7.0\luarocks-admin.bat
62
63Configuring LuaRocks...
64Created LuaRocks hardcoded settings file: D:\luarocks-3.7.0\lua\luarocks\core\hardcoded.lua
65***************
66*** WARNING *** LuaRocks config file already exists: 'D:\luarocks-3.7.0\config-5.1.lua'. The old file has been renamed to 'config-5.1.lua.bak'
67***************
68Created LuaRocks config file: D:\luarocks-3.7.0\config-5.1.lua
69
70Creating rocktrees...
71Created system rocktree    : "D:\luarocks-3.7.0\systree"
72Local user rocktree exists : "C:\Users\Admin\AppData\Roaming\LuaRocks"
73
74============================
75== LuaRocks is installed! ==
76============================
77
78
79You may want to add the following elements to your paths;
80Lua interpreter;
81  PATH     :   D:\Lua\5.1
82  PATHEXT  :   .LUA
83LuaRocks;
84  PATH     :   D:\luarocks-3.7.0
85  LUA_PATH :   D:\luarocks-3.7.0\lua\?.lua;D:\luarocks-3.7.0\lua\?\init.lua
86Local user rocktree (Note: %APPDATA% is user dependent);
87  PATH     :   %APPDATA%\LuaRocks\bin
88  LUA_PATH :   %APPDATA%\LuaRocks\share\lua\5.1\?.lua;%APPDATA%\LuaRocks\share\lua\5.1\?\init.lua
89  LUA_CPATH:   %APPDATA%\LuaRocks\lib\lua\5.1\?.dll
90System rocktree
91  PATH     :   D:\luarocks-3.7.0\systree\bin
92  LUA_PATH :   D:\luarocks-3.7.0\systree\share\lua\5.1\?.lua;D:\luarocks-3.7.0\systree\share\lua\5.1\?\init.lua
93  LUA_CPATH:   D:\luarocks-3.7.0\systree\lib\lua\5.1\?.dll
94
95Note that the %APPDATA% element in the paths above is user specific and it MUST be replaced by its actual value.
96For the current user that value is: C:\Users\Admin\AppData\Roaming.

以上信息表示:

  • Lua interpreter:Lua解释器,也就是Lua 5.1
  • LuaRocks的安装目录是D:\luarocks-3.7.0
  • rocktree表示通过Luarocks安装(luarocks install xxx)的Lua模块存放在什么位置,有当前用户的存放路径,也有电脑系统用户的存放路径 以上显示的LUA_PATH和LUA_CPATH内容要添加到环境变量中。可以自己手动添加到环境变量,如果环境变量中没有LUA_PATH和LUA_CPATH,就手动新建一个。这两个变量的作用是,通过Luarocks install安装的Lua模块能够在Lua程序中require进去。

也可以通过一下命令来配置最终的LUA_PATH、LUA_CPATH和PATH。

1PS D:\luarocks-3.7.0-win32> luarocks path
2SET LUA_PATH=D:\luarocks-3.7.0\lua\?.lua;D:\luarocks-3.7.0\lua\?\init.lua;.\?.lua;D:\Lua\5.1\lua\?.lua;D:\Lua\5.1\lua\?\init.lua;D:\Lua\5.1\?.lua;D:\Lua\5.1\?\init.lua;D:\Lua\5.1\lua\?.luac;C:\Users\Admin\AppData\Roaming/luarocks/share/lua/5.1/?.lua;C:\Users\Admin\AppData\Roaming/luarocks/share/lua/5.1/?/init.lua;D:\luarocks-3.7.0\systree/share/lua/5.1/?.lua;D:\luarocks-3.7.0\systree/share/lua/5.1/?/init.lua
3
4SET LUA_CPATH=.\?.dll;D:\Lua\5.1\?.dll;D:\Lua\5.1\loadall.dll;D:\Lua\5.1\clibs\?.dll;D:\Lua\5.1\clibs\loadall.dll;.\?51.dll;D:\Lua\5.1\?51.dll;D:\Lua\5.1\clibs\?51.dll;C:\Users\Admin\AppData\Roaming/luarocks/lib/lua/5.1/?.dll;D:\luarocks-3.7.0\systree/lib/lua/5.1/?.dll
5
6SET PATH=C:\Users\Admin\AppData\Roaming/luarocks/bin;D:\luarocks-3.7.0\systree/bin;D:\luarocks-3.7.0;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\Microsoft VS Code\bin;C:\Program Files\Git\cmd;D:\Lua\5.1;D:\Lua\5.1\clibs;C:\Users\Admin\AppData\Local\Microsoft\WindowsApps;D:\MinGW\bin;

把以上三个变量配置到系统环境变量中。 至此Luarocks安装完毕,额外提示一下,在环境变量中,Luarocks的安装目录要放在Lua安装目录的前面,不然在CMD中输入luarocks会调用Lua自带的luarocks。