2019独角兽企业重金招聘Python工程师标准>>>
本文主要记录一次CentOS上安装Lua的过程, 并对其中遇到的问题进行解决~
呃,在安装之前,先来看看什么是Lua以及Lua有什么特性、适合什么样的应用场景~
Lua概述
Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
Lua 是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo所组成并于1993年开发。
设计目的
其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
Lua特性
- 轻量级: 它用标准C语言编写并以源代码形式开放,编译后仅仅一百余K,可以很方便的嵌入别的程序里。
- 可扩展: Lua提供了非常易于使用的扩展接口和机制:由宿主语言(通常是C或C++)提供这些功能,Lua可以使用它们,就像是本来就内置的功能一样。
- 其它特性:
- 支持面向过程(procedure-oriented)编程和函数式编程(functional programming);
- 自动内存管理;只提供了一种通用类型的表(table),用它可以实现数组,哈希表,集合,对象;
- 语言内置模式匹配;闭包(closure);函数也可以看做一个值;提供多线程(协同进程,并非操作系统所支持的线程)支持;
- 通过闭包和table可以很方便地支持面向对象编程所需要的一些关键机制,比如数据抽象,虚函数,继承和重载等
Lua应用场景
- 游戏开发
- 独立应用脚本
- Web 应用脚本
- 扩展和数据库插件如:MySQL Proxy 和 MySQL WorkBench
- 安全系统,如入侵检测系统
Lua安装
Lua安装步骤
从Lua官网【https://www.lua.org/start.html】上可以看到CentOS上安装Lua只需要四个步骤
curl -R -O http://www.lua.org/ftp/lua-5.3.4.tar.gz
tar zxf lua-5.3.4.tar.gz
cd lua-5.3.4
make linux test
下载Lua安装包
[root@dev18 srv]# curl -R -O http://www.lua.org/ftp/lua-5.3.4.tar.gz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 296k 100 296k 0 0 104k 0 0:00:02 0:00:02 --:--:-- 117k
[root@dev18 srv]#
解压下载好的安装包
[root@dev18 srv]# tar -zvxf lua-5.3.4.tar.gz
lua-5.3.4/
lua-5.3.4/Makefile
lua-5.3.4/doc/
lua-5.3.4/doc/luac.1
lua-5.3.4/doc/manual.html
lua-5.3.4/doc/manual.css
lua-5.3.4/doc/contents.html
lua-5.3.4/doc/lua.css
lua-5.3.4/doc/osi-certified-72x60.png
lua-5.3.4/doc/logo.gif
lua-5.3.4/doc/lua.1
lua-5.3.4/doc/index.css
lua-5.3.4/doc/readme.html
lua-5.3.4/src/
lua-5.3.4/src/ldblib.c
lua-5.3.4/src/lmathlib.c
lua-5.3.4/src/loslib.c
lua-5.3.4/src/lvm.c
lua-5.3.4/src/ldo.h
lua-5.3.4/src/lua.h
lua-5.3.4/src/lgc.h
lua-5.3.4/src/ltm.h
lua-5.3.4/src/loadlib.c
lua-5.3.4/src/lmem.c
lua-5.3.4/src/lstate.h
lua-5.3.4/src/Makefile
lua-5.3.4/src/lzio.h
lua-5.3.4/src/luaconf.h
lua-5.3.4/src/lopcodes.c
lua-5.3.4/src/lua.c
lua-5.3.4/src/lundump.h
lua-5.3.4/src/lbaselib.c
lua-5.3.4/src/ltable.c
lua-5.3.4/src/ldump.c
lua-5.3.4/src/liolib.c
lua-5.3.4/src/llimits.h
lua-5.3.4/src/lfunc.h
lua-5.3.4/src/lualib.h
lua-5.3.4/src/lzio.c
lua-5.3.4/src/lctype.c
lua-5.3.4/src/lmem.h
lua-5.3.4/src/llex.h
lua-5.3.4/src/ltable.h
lua-5.3.4/src/lstring.c
lua-5.3.4/src/ldebug.h
lua-5.3.4/src/lbitlib.c
lua-5.3.4/src/lprefix.h
lua-5.3.4/src/llex.c
lua-5.3.4/src/linit.c
lua-5.3.4/src/lobject.h
lua-5.3.4/src/lapi.h
lua-5.3.4/src/ldebug.c
lua-5.3.4/src/ldo.c
lua-5.3.4/src/lvm.h
lua-5.3.4/src/lauxlib.c
lua-5.3.4/src/luac.c
lua-5.3.4/src/lctype.h
lua-5.3.4/src/lstring.h
lua-5.3.4/src/lcorolib.c
lua-5.3.4/src/lutf8lib.c
lua-5.3.4/src/lgc.c
lua-5.3.4/src/lstate.c
lua-5.3.4/src/lundump.c
lua-5.3.4/src/ltablib.c
lua-5.3.4/src/lauxlib.h
lua-5.3.4/src/ltm.c
lua-5.3.4/src/lparser.c
lua-5.3.4/src/lcode.h
lua-5.3.4/src/lobject.c
lua-5.3.4/src/lcode.c
lua-5.3.4/src/lopcodes.h
lua-5.3.4/src/lfunc.c
lua-5.3.4/src/lapi.c
lua-5.3.4/src/lparser.h
lua-5.3.4/src/lua.hpp
lua-5.3.4/src/lstrlib.c
lua-5.3.4/README
[root@dev18 srv]#
make linux test
[root@dev18 srv]# cd lua-5.3.4
[root@dev18 lua-5.3.4]# make linux test
cd src && make linux
make[1]: Entering directory `/srv/lua-5.3.4/src'
make all SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-Wl,-E -ldl -lreadline"
make[2]: Entering directory `/srv/lua-5.3.4/src'
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o lapi.o lapi.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o lcode.o lcode.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o lctype.o lctype.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o ldebug.o ldebug.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o ldo.o ldo.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o ldump.o ldump.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o lfunc.o lfunc.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o lgc.o lgc.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o llex.o llex.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o lmem.o lmem.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o lobject.o lobject.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o lopcodes.o lopcodes.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o lparser.o lparser.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o lstate.o lstate.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o lstring.o lstring.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o ltable.o ltable.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o ltm.o ltm.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o lundump.o lundump.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o lvm.o lvm.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o lzio.o lzio.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o lauxlib.o lauxlib.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o lbaselib.o lbaselib.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o lbitlib.o lbitlib.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o lcorolib.o lcorolib.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o ldblib.o ldblib.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o liolib.o liolib.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o lmathlib.o lmathlib.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o loslib.o loslib.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o lstrlib.o lstrlib.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o ltablib.o ltablib.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o lutf8lib.o lutf8lib.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o loadlib.o loadlib.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o linit.o linit.c
ar rcu liblua.a lapi.o lcode.o lctype.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o ltm.o lundump.o lvm.o lzio.o lauxlib.o lbaselib.o lbitlib.o lcorolib.o ldblib.o liolib.o lmathlib.o loslib.o lstrlib.o ltablib.o lutf8lib.o loadlib.o linit.o
ranlib liblua.a
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o lua.o lua.c
lua.c:82:31: error: readline/readline.h: No such file or directory
lua.c:83:30: error: readline/history.h: No such file or directory
lua.c: In function ‘pushline’:
lua.c:312: warning: implicit declaration of function ‘readline’
lua.c:312: warning: assignment makes pointer from integer without a cast
lua.c: In function ‘addreturn’:
lua.c:339: warning: implicit declaration of function ‘add_history’
make[2]: *** [lua.o] Error 1
make[2]: Leaving directory `/srv/lua-5.3.4/src'
make[1]: *** [linux] Error 2
make[1]: Leaving directory `/srv/lua-5.3.4/src'
make: *** [linux] Error 2
[root@dev18 lua-5.3.4]#
问题 & 解决
问题
从上述执行make linux test命令的结果可以看出,遇到了找不到readline相关文件或者目录的错误,如
lua.c:82:31: error: readline/readline.h: No such file or directory
lua.c:83:30: error: readline/history.h: No such file or directory
解决方法
可以通过安装readline-devel解决问题
安装readline
使用yum install readline-devel 命令安装readline devel~
[root@dev18 lua-5.3.4]# yum install readline-devel
Loaded plugins: fastestmirror, security
Setting up Install Process
Determining fastest mirrors
ISO | 4.0 kB 00:00
epel | 4.3 kB 00:00
http://download.fedoraproject.org/pub/epel/6/x86_64/repodata/94743b7d3ecf549c9e9e96b30de5d95e67f987ef488c0df4cd3ebd3ca664b9b1-primary.sqlite.bz2: [Errno 14] PYCURL ERROR 56 - "Failure when receiving data from the peer"
Trying other mirror.
Resolving Dependencies
--> Running transaction check
---> Package readline-devel.x86_64 0:6.0-4.el6 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
==============================================================================================================================================================================================================================================================================
Package Arch Version Repository Size
==============================================================================================================================================================================================================================================================================
Installing:
readline-devel x86_64 6.0-4.el6 ISO 134 k
Transaction Summary
==============================================================================================================================================================================================================================================================================
Install 1 Package(s)
Total download size: 134 k
Installed size: 255 k
Is this ok [y/N]:
输入“y”
Installed size: 255 k
Is this ok [y/N]: y
Downloading Packages:
readline-devel-6.0-4.el6.x86_64.rpm | 134 kB 00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : readline-devel-6.0-4.el6.x86_64 1/1
Verifying : readline-devel-6.0-4.el6.x86_64 1/1
Installed:
readline-devel.x86_64 0:6.0-4.el6
Complete!
[root@dev18 lua-5.3.4]#
再次执行make linux test
[root@dev18 lua-5.3.4]# make linux test
cd src && make linux
make[1]: Entering directory `/srv/lua-5.3.4/src'
make all SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-Wl,-E -ldl -lreadline"
make[2]: Entering directory `/srv/lua-5.3.4/src'
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o lua.o lua.c
gcc -std=gnu99 -o lua lua.o liblua.a -lm -Wl,-E -ldl -lreadline
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o luac.o luac.c
gcc -std=gnu99 -o luac luac.o liblua.a -lm -Wl,-E -ldl -lreadline
make[2]: Leaving directory `/srv/lua-5.3.4/src'
make[1]: Leaving directory `/srv/lua-5.3.4/src'
src/lua -v
Lua 5.3.4 Copyright (C) 1994-2017 Lua.org, PUC-Rio
[root@dev18 lua-5.3.4]#
从上述输出内容,可以看出Lua已经安装了~
验证
[root@dev18 ~]# lua -i
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
> print("Welcome to lua world");
Welcome to lua world
>
也可以编写lua脚本查看lua是否安装成功,创建hello.lua文件,文件内填写如下内容:
print("welcome to lua world~");
然后执行lua脚本~
[root@dev18 luafiles]# vim hello.lua
[root@dev18 luafiles]# lua hello.lua
welcome to lua world~
通过上述的几个尝试和验证,可以认定Lua已经在CentOS上安装成功了~