Lua is a powerful, fast, lightweight, embeddable scripting language.
Lua is a proven, robust language:fast, portable, embeddable, powerful(but simple), small, free.
Lua
是由标准C实现的面向嵌入式编程语言,由于小巧轻便、简单,支持通用的过程式编程,也能对面向对象编程,函数式编程,数据驱动式编程提供很好的支持。目前在网络游戏
中有广泛的使用,lua作为一款优秀的脚步语言对于扩展程序业务逻辑是很方便的,脚步语言在客户端中可以方便的更新,对于更新业务逻辑也是个不错的选择。
lua源码下载可以从官网下载:http://www.lua.org/ftp/
5.2版本和5.1以前有实现的区别,API有不少变化,像python,网上的例子也以5.1居多,要是维护老代码建议下载5.2以前版本,要是从头学,还是5.2版本吧。笔者是从5.1开始学习的,原因是有个开源的c++和lua的交换库tolua++在5.1上使用没问题,使用5.2的话是有问题的,即使做适当修改能够编译通过。(c++和lua交互还有其他库,以后会和大家交流)。
编译:
linux编译:
linux编译比较简单,官网有说明,如下:
curl -R -O http://www.lua.org/ftp/lua-5.2.3.tar.gz tar zxf lua-5.2.3.tar.gz cd lua-5.2.3 make linux test
windows编译:
1、生成lua.exe
1、使用vs2013建立工程win32应用程序,工程名:lua5.2.3 2、工程--》属性--》c/c++--》预编译头--》预编译头,不使用预编译头 3、由于vs2013的选项里:2、工程--》属性--》c/c++--》常规--》将警告视为错误,选项改为“否 (/WX-),否则会有一些警告而引起的错误 4、工程--》属性--》c/c++--》预处理器,定义:_CRT_SECURE_NO_WARNINGS 5、注释掉luac.c文件中的main函数,此main函数会和lua.c中的main函数冲突,而不能生成lua.exe 6、生成,将在vs生成目录下生成:lua5.2.3.exe,笔者的绝对路径为: I:\lua-5.2.3.tar\lua5.2.3\Debug\lua5.2.3.exe 7、win+R打开cmd控制台程序cd到I:\lua-5.2.3.tar\lua5.2.3\Debug\路径,执行lua5.2.3.exe,测试如下: Lua 5.2.3 Copyright (C) 1994-2013 Lua.org, PUC-Rio > print("hello world") hello world >
看到输出了“hello world",恭喜你,你已经能够使用lua了,你已经是个luaer了,哈哈。
此lua.exe不依赖任何dll,可直接放置在window下的system路径,在命令行里直接运行。
2、生成lua.dll动态库
1、使用vs2013建立工程win32应用程序,工程名:lua5.2.3 2、工程-》属--》常规--》配置默认值--》配置类型,改为:“动态库(.dll)” 3、工程--》属性--》c/c++--》预编译头--》预编译头,不使用预编译头 4、由于vs2013的选项里:2、工程--》属性--》c/c++--》常规--》将警告视为错误,选项改为“否 (/WX-),否则会有一些警告而引起的错误 5、工程--》属性--》c/c++--》预处理器,定义:_CRT_SECURE_NO_WARNINGS 6、分别注释掉luac.c和lua.c中的mian函数
在笔者的机器上顺利生成了I:\lua-5.2.3.tar\lua5.2.3\Debug\lua5.2.3.lib和I:\lua-5.2.3.tar\lua5.2.3\Debug\lua5.2.3.dll。
顺利的生成了exe你就可以测试lua脚本了,,有了dll你就可以直接在工程里自己开发了。如果嫌麻烦,可以下载编译好的版本。 官网路径:http://luabinaries.sourceforge.net/
说明:
1、上面只说了lua解释器的编译方式,其实就是因为注释了luac.c中的main函数,生成了lua.exe解释器,如果注释的是lua.c中的mian函数,那生成的就是luac.exe编译器
2、 lua.exe是lua的解释器,可以直接运行lua脚本;luac.exe是lua的编译工具,生成lua字节码,以便lua代码的更快加载和保护lua代码,同时也能检查lua脚本的错误。后面会 和大家一起交流学习。
3、本文编译的lua.exe是不需要dll支持的,lua对sqlite、cjson的支持在网上大家看到的都是以dll的形式提供的,我们编译的lua依然支持原来的方式。我们编译是exe,那生成 lib和dll是分分钟钟的事情,那对于我们的二次开发是很便利的,如果我们在代码中加入lsqlite、json模块的支持,我们的lua功能就更强大了,而只需要一个dll,这是一种选 择,当然你要说这对于模块化的方式不好。那我只能说,好不好是需求决定的。此内容以后和大家交流学习。
参考:
http://www.codingnow.com/2000/download/lua_manual.html
http://www.lua.org/