Lua是一门神奇的脚本语言,游戏宅必备,懒人必备。Lua差多不是学起来用起来最简单的语言了,以至于简单到自身就是文档,自身就是配置文件。但是Lua的运行效率却是众多脚本中非常高的,据说仅次于V8爹下的js。主要原因是它是主要和c/c++打交道嵌入式脚本,c++的逻辑写的着实蛋疼的时候可以考虑下这门脚本语言。

Lua有直接的windows安装包的,还内置了一个编辑器很不错。但是为了更深层次的理解Lua,本文主要介绍下如何利用Lua源码来自己编译解释器。

首先我们去下载一下Lua的本体...

百度输入:Lua官网
戳第一个进去。找到唯一认识的单词Download。
戳进去在SourceCode文件夹下抓一个lua-5.x.x.tar.gz下载。
乍一看这好像是Linux系统下的压缩文件,不过我们有万能的winrar,管他能不能用先解压再说。
解压后获得Lua的资源文件夹。先进入doc文件夹把一个叫logo的图片文件收藏,然后心中默念 Lua大法好。

进入src文件夹,这200多k的c代码就是Lua的本体了,没错就这么点。依靠这些本体我们可以在windows环境下做出三样东西:
一个Lua的静态库 .lib
一个Lua的解释器 Lua.exe
一个Lua的编译器 Luac.exe

静态库一般还需要搭配几个这个src中的头文件使用,可以瞬间嵌入到c/c++程序中让脚本成为程序的一部分(毕竟大家都是c嘛)。通过解释器可以直接执行脚本,这个用过python的一定都非常熟悉,随便写一个xx.py 然后在终端输入 python xx.py就可以执行Python脚本,Lua解释器同理,编译好后配置环境变量,然后就可以在终端执行Lua xx.lua来快捷执行Lua脚本文件。但是这么做毕竟是一边解释一边执行,所以Lua还提供了Luac编译器,可以直接将Lua脚本编译成二进制可执行文件,好了这大概就是这三个工具的主要作用了。自己动手丰衣足食,虽然Lua也有Python那样的傻瓜安装包,但是自己编译出来的才是亲儿子不是嘛哈哈,接下来我们就来编译这三个。

先说下我的环境:

操作系统 : Windows 7
工具 : VisualStudio 2013 / Lua源代码

1.静态库:打开VisualStudio,新建一个win32空项目,名字为Lua53,项目类型为静态库。取消勾选预编译头。在源文件中添加src文件夹下的所有文件,然后移除lua.c 和 luac.c这两个文件,右键项目->生成。

然后跟踪到项目的文件夹。这个时候在Debug目录下应该就有我们编译好的Lua53.lib库了。

2.解释器:新建一个win32空项目,项目类型为控制台应用程序,名字为Lua,取消预编译头,在源文件中添加src文件夹下的lua.c。
右键项目生成。肯定会失败的,不过不要紧,目的是生成Debug文件夹,进入项目的Debug文件夹,在其中创建两个文件夹,一个名叫win7,另一个叫lua53
把win7项目所需要的所有静态库装到win7文件夹里边,一般win7库文件的坐标是C:\Program Files\Microsoft SDKs\Windows\v7.1A\Lib 把里边的.lib全拷过来
lua53文件夹中,装入刚才编译好的静态库Lua53.lib
右键项目->属性->链接器->常规->附加库目录,添加两个项目所需要的静态库路径,就是刚才我们创建的两个位于Debug文件夹下的路径。
右键项目->属性->链接器->输入->附加依赖项,添加一项 Lua53.lib

大功告成后右键项目生成,不出意外Debug文件夹下就会有一个Lua.exe可执行文件了。
将这个Debug文件夹的路径添加到系统变量的Path当中,启动powershell 输入 Lua 应该就可以进入Lua环境了。同时也可以写一个xx.lua 然后执行Lua xx.lua来执行这个脚本。

3.编译器:步骤和上边完全一样,可以勾选预编译头。源文件中添加的是src文件夹下的luac.c。在Windows要这个编译器没什么卵用,因为编译的是.out的二进制可执行文件QAQ。

注:上述的Debug目录就可以当成一个最终产品移植到别的windows机器上,因为静态库都已经傻瓜似的自带了,其实用不了那么多的.lib懒得挑了因为这都不是重点。但即便如此如果对方没有安装vs2013依旧执行不了,因为还缺少一个动态库MSVCR120.dll(我能怎么办我也很绝望啊)。 这需要机器安装Microsoft Visual C++ 2013 Redistributable Package。因为我们的都是win32项目,对应安装32位版本就好。

https://github.com/RockDeria/LuaFile.git

再注:关于Lua语法方面的学习,书籍的话当然推荐经典的《Lua程序设计》(黄皮肤红眼睛),网上的话菜鸟教程也很不错。

从零开始的Lua宅[1]:编译Lua解释器的更多相关文章

  1. 用VC编译lua源码,生成lua语言的解释器和编译器

    用VC编译lua源码,生成lua语言的解释器和编译器 1.去网址下载源码 http://www.lua.org/download.html 2.装一个VC++,我用的是VC6.0 3.接下来我们开始编 ...

  2. windows下编译lua源码

    所有的lua源码都放在了 src 文件夹下,当然,不同的lua版本目录结构有可能不一样,但是都会有 src 这个文件夹,只有这个才是我们编译必须的.而且lua越做越精简了,5.1的版本里面还有一些te ...

  3. <转>windows下编译lua源码

    因为之前一直使用 lua for windows 来搭建lua的使用环境,但是最新的 lua for windows 还没有lua5.2,我又想用这个版本的lua,所以被逼无奈只能自己编一下lua源码 ...

  4. 编译lua

    http://www.lua.org/ 新建一个 static library 工程,把解压得到的目录下的src子目录中的所有.h和.c文件拷贝到新工程目录下. 工程中删除自动生成的 main.c 文 ...

  5. 在Windows和MacOS下编译Lua

    官方说明: http://www.lua.org/manual/5.3/readme.html 在Windows下编译Lua动态链接库的注意事项: 1. 创建一个空的DLL项目: 2. 将src文件夹 ...

  6. Lua源码编译之CL编译器编译

    通过使用VC下的CL编译器,可方便地编译Lua源码,而无需构造工程并设置各种选项: 以下以源码Lua5.3.1版本为例,将通过CL编译选项直接编译源码,为方便编译将采用批处理脚本,脚本放置在Lua解压 ...

  7. Sublime Text(2/3)编译lua

    想在subLime text 3中集成编译Lua(或其他语言)功能,只需要在Tool->Build System -> New Build System中将原来的 { "shel ...

  8. [lua]安卓ndk如何编译lua库

    这里说的lua库是标准lua库,不包含tolua,不包含cocos2dx的各种lua扩展,是干净的lua. 参考: http://stackoverflow.com/questions/1229965 ...

  9. Lua 5.2 编译 For Windows

    body { font-family: 微软雅黑; font-size: 11pt; line-height: 1.5; } html, body { color: #000000; backgrou ...

随机推荐

  1. POJ1195(二维树状数组)

    Mobile phones Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 17176   Accepted: 7920 De ...

  2. 在浏览器端用JS创建和下载文件

    前端很多项目中,都有文件下载的需求,特别是JS生成文件内容,然后让浏览器执行下载操作(例如在线图片编辑.在线代码编辑.iPresst等). 但受限于浏览器,很多情况下我们都只能给出个链接,让用户点击打 ...

  3. 关于java中equals与==的区别的小实验

    java中equals与==经常容易混淆,简单一点说就是equals比较的是值是否相等,是一种方法,==比较的两个对象在JVM中的地址,是一种操作符. 做了几个小实验比较结果. 实验一: String ...

  4. FormsAuthentication.Signout不能清楚服务器端cookie

    具体信息可以参考文章 https://support.microsoft.com/en-us/help/900111/the-formsauthentication.signout-method-do ...

  5. Hash和Salt Umbraco 默认的password存储方式

    本文章转载自 http://blog.reneorban.com/2014/10/hash-and-salt-umbraco-passwords.html Hash and Salt Umbraco ...

  6. Java异常控制机制和异常处理原则【转】

    原文:https://www.jianshu.com/p/15872cba211d Java异常控制机制又被称为“违例控制机制”. 捕获程序错误最理想的时机是在编译阶段,这样可以彻底避免错误的代码运行 ...

  7. 自定义TabWidget

    在开发过程中,默认的TabWidget不能满足我们对于UI的要求并且没有足够的属性工我们去修改,这个时候能够自定义TabWidget是非常必要的.自定义TabWidget组要运用的是TabSpec.s ...

  8. “MVC+Nhibernate+Jquery-EasyUI”信息发布系统 第二篇(数据库结构、登录窗口、以及主界面)

    一.在上一篇文章中,主要说的就是把主框架搭建起来,并且Nhibernate能达到增删改查的地步.测试好之后再来看这篇文章,我的主框架相对来说简答一点,重点还是实现系统的功能,以及对Jquery-Eas ...

  9. OVS数据库操作

    说明 [Record]就是行对应的_uuid [if-exists]当值不存在的是否会报错而不是返回False 基本信息查询 列举数据库 # ovsdb-client list-dbs Open_vS ...

  10. 洛谷P2868 [USACO07DEC]观光奶牛Sightseeing Cows

    P2868 [USACO07DEC]观光奶牛Sightseeing Cows 题目描述 Farmer John has decided to reward his cows for their har ...