这几天安装luarocks时候遇到不少坑,这里记录一下。吐槽一下,网上教程一堆,实际安装和使用时候,会出现各种奇奇怪怪的问题,包括lua的官网,也是奇葩,安装包下载写的不明不白。
我打算安装lua 5.1,好吧,进入官网https://lua.org,进入下载界面,有源码编译安装,显然太麻烦了,我需要二进制安装包安装。
进入下载页面之后,寻找lua 5.1版本,千万不要去History栏目下面找,直接使用Lua for Windows版本
我把下载地址直接贴在这里: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-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,这里简单说明一下。
- 下载MinGW安装管理器,用于下载各个版本的MinGW。进入下载页面:
https://sourceforge.net/projects/mingw/files/,点击Download mingw-get-setup.exe链接。
- 下载mingw-get-setup.exe,按照提示一步一步安装即可。安装成功后打开软件,选中下面这三个选项:mingw32-base, mingw32-gcc=g++, msys-base(我没有选择这个),分别右键选择Mark for selection。
然后,选择菜单栏的Installation下面的Apply Changes菜单项,弹出一个安装确认框,选中Apply进行安装。紧接着耐心等待安装成功。
- 最后把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。