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. Windows窗体间的数据交互

    轻松掌握Windows窗体间的数据交互                                     作者:郑佐 2004-04-05 Windows 窗体是用于 Microsoft Win ...

  2. Fran&ccedil;ois&nbsp;Hollande’s&amp;…

    EVER since President François Hollande was elected last May, things have not gone right for him. He ...

  3. day1 java基础回顾- Properties类与配置文件

    Properties配置文件说明 Properties类对应.properties文件.文件内容是键值对,键值对之间使用"="或空格隔开.开头是"#"的表示注释 ...

  4. 如何升级一个JavaWeb应用

    准备db变更 准备整个war包或变更的文件 上传文件至云盘​(通常直接上传文件较慢,建议先传到云盘,然后下载) 从云盘下载 执行db变更 解压war到指定目录或替换变更的文件 修改设计IP地址的配置文 ...

  5. ubuntu18.04安装opencv 3.4.1

    github 地址: https://github.com/opencv/opencv 安装依赖 sudo apt-get install build-essential sudo apt--dev ...

  6. PHP中GD库是做什么用的? PHP GD库介绍11111111

    什么是gd库?    gd库是php处理图形的扩展库,gd库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片. 在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据 ...

  7. 萌新笔记之Nim取石子游戏

    以下笔记摘自计算机丛书组合数学,机械工业出版社. Nim取石子游戏 Nim(来自德语Nimm!,意为拿取)取石子游戏. 前言: 哇咔咔,让我们来追寻娱乐数学的组合数学起源! 游戏内容: 有两个玩家面对 ...

  8. 平衡的阵容 st表学习

    模板 预处理 void rmq_isit() { ;i<=n;i++) mx[i][]=mn[i][]=a[i]; ;(<<j)<=n;j++) ;i+(<<j)- ...

  9. python爬虫——web前端基础(2)

    图像标记------->>>> <img>图像标记,用来在网页中显示图像.使用方法为:<img src="路径/文件名.图片格式"  wi ...

  10. Java8 中的 Optional

    从 Java 8 引入的一个很有趣的特性是 Optional  类.Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException) —— 每个 Java 程序员都 ...