Windows的Lua环境安装 (Lua&Luarocks)

前言

像这些开源软件,一般也依赖是不是Win10还是更新的Windows系统,在一般的Windows7上32、64位都可以安装,并且常年不变,套路类似,一般情况很稳定,10几年不变。

在Windwos下,如果没有配置环境变量,直接下载的Luarocks,在用Luarocks进行安装包的时候,需要告诉Luarocks,Lua执行文件的位置,还有lua.h文件的位置。

luarocks-admin --lua-dir d:\gnu\lua\5.1 LUA_INCDIR='d:\gnu\lua\5.1\include'

d:\gnu\lua53\luarocks.exe make markdown-0.33-1.rockspec  
--local 
--lua-dir d:\gnu\lua53   
--lua-dir d:\gnu\lua\5.1
C:/Users/tanguo/AppData/Roaming/luarocks (license: MIT/X11)

Luarocks 2.0.2

Luarocks 2.0.2 实现本地安装Rock

wget http://luarocks.org/markdown-0.33-1.src.rock
luarocks unpack markdown-0.33-1.src.rock
cd markdown-0.33-1\markdown\

luarocks 2.02版本,只需要下面的操作

luarocks make markdown-0.33-1.rockspec  
--local
--lua-dir d:\gnu\lua\5.1   

还可以加上gcc的编译参数,带上debug信息,coredump的时候也好用bt看调用栈信息。

CC="gcc -g"

安装本地目标,非系统目录。

luarocks install markdown --local

Luarocks 3.7

luarocks3.7版本中有–local这个参数,

并且可以通过下面的命令告诉Luarocks,lua.h的位置。

luarocks config variables.LUA_INCDIR <dir>

Lua Path

luarocks 3.7 可以看到Lua的Path信息,如下:

luarocks path

lua-dir 与 LUA_INCDIR

如果Path信息里没有相关的信息,需要在执行Luarocks进行指定。

luarocks-admin --lua-dir d:\gnu\lua\5.1 LUA_INCDIR='d:\gnu\lua\5.1\include'

d:\gnu\lua53\luarocks.exe make markdown-0.33-1.rockspec –local –lua-dir d:\gnu\lua53

–lua-dir d:\gnu\lua\5.1

C:/Users/tanguo/AppData/Roaming/luarocks (license: MIT/X11)

lua5.1和lua5.3是可以并存的,最好还是用新版,或者Luajit。

一般情况下,Lua5.1提供打包的下载方安案。

Luarocks二进制安装

Lua for windows安装包下载

https://github.com/rjpcomputing/luaforwindows/releases
https://github.com/rjpcomputing/luaforwindows

Installation instructions for windows

https://github.com/luarocks/luarocks/wiki/Installation-instructions-for-Windows

Luarocks 各种版本下载

http://luarocks.github.io/luarocks/releases/

Markdown与LFS

https://github.com/mpeterv/markdown

require "markdown"
require "lfs"

text1="## test"
md = markdown(text1)
print(md)

print("test")


for entry in lfs.dir("../Downloads") do
	print(entry)
end

Lua编辑器SciTE

二进制安装包的Lua 5.1提供的Lua编辑器是SciTE,用于运行和调试Lua程序。代码可以高亮,可以导出PDF。

Cmder自带cgwin

所以在Cmder终端里可以正常的使用Linux的常用命令:Clear、ls、find这些命令。

TDM-GCC

http://tdragon.net/
https://jmeubank.github.io/tdm-gcc/	

Luarocks本地安装

用sudo luarocks install markdown 用管理员安装的rock,是安装在/usr/local

luarocks install markdown 如果加上–local参数,rock是安装在/home/candylab/.luarocks

如果用–local时,不要加sudo, 直接安装到当前目录的用户。安装后 用sudo luarocks list显示的root用户安装过的Rocks,是没有安装markdown的。

luarocks list显示当前用户安装的rock,才能显示出来安装的Rock有Markdown。

如果你在当前用户,运行lua5.3,require”markdown”,Lua会提示找不到这个包。 需要export出/home/candylab/.luarocks这个目录。

如果用mlocate找markdown.lua会发现,本地能过–local参数安装的lua在/home/candylab/.luarocks/share/lua/5.3/markdown.lua

用sudo没有用–local参数安装的文件在,如下: /usr/local/share/lua/5.3/markdown.lua 一般情况下,在起动Lua的时候, 会有限出找这个目录。

如果文件–local安装到了本地,需要在制定的时候,制定markdown.lua的位置,否则lua找不到这个库。

可以直接在Lua代码中制定:

package.path="/home/candylab/.luarocks/share/lua/5.3/markdown.lua"
require"markdown"
text1="## test"
md = markdown(text1)
print(md)

这样直接给package.path赋值,会覆盖掉原先的值,这样不好,需要进行下面的处理,保留原先package.path的值,在结尾追加新的lua库文件的路径,这样在公用部分的系统目录下是没有这个库,只有在当前用户可以看到。

--package.path="/home/candylab/.luarocks/share/lua/5.3/markdown.lua"
print(package.path)
package.path = package.path..";/home/candylab/.luarocks/share/lua/5.3/?.lua";
print(package.path)
require"markdown"
text1="## test"
md = markdown(text1)
print(md)

PATH=$PATH:/usr/local/openresty/nginx/sbin export PATH

PATH=$PATH:/home/candylab/.luarocks/lib/luarocks/rocks export PATH

PATH=$PATH:/home/candylab/.luarocks/share/lua/5.3/ export PATH

/usr/share/texlive/texmf-dist/tex/luatex/markdown/markdown.lua

useradd passwd visudo

sudo apt install lua5.3 sudo apt install luarocks sudo apt install mlocate sudo apt install liblua5.3-dev luarocks install luafilesystem –local

Installing https://luarocks.org/luafilesystem-1.8.0-1.src.rock
gcc -O2 -fPIC -I/usr/include/lua5.3 -c src/lfs.c -o src/lfs.o
gcc -shared -o lfs.so -L/usr/local/lib src/lfs.o
luafilesystem 1.8.0-1 is now installed in /home/candylab/.luarocks (license: MIT/X11)

Luafilesystem是.so文件和.lua库安装位置是不同的。 /home/candylab/.luarocks/lib/lua/5.3

![[Pasted image 20211006001648.png]]

print(package.path)
package.path = package.path..";/home/candylab/.luarocks/share/lua/5.3/?.lua";
print(package.path)
print(package.cpath)
package.cpath = package.cpath..";/home/candylab/.luarocks/lib/lua/5.3/?.so";
print(package.cpath)

require "markdown"
require "lfs"

text1="## test"
md = markdown(text1)
print(md)

print("test")


for entry in lfs.dir("../") do
        print(entry)
end

apt install luajit

Edit me