文档章节

Lua2.4 准备工作

晓寒
 晓寒
发布于 2014/09/18 13:09
字数 546
阅读 178
收藏 4

为什么要拿出来 Lua2.4 来看一下呢?
 
因为 Lua2.4 的时候增加了一个的外部编译器 luac,可以把 Lua 脚本编译成字节码。解释器可以直接执行编译好的字节码,加载速度得到了提升。这里主要是想看一下编译器是如何保存生成的字节码的,所以简单地把这个版本拿出来看一下。

Lua2.4 的代码的下载地址: www.lua.org/ftp/lua-2.4.tar.gz

代码下载下来后,在 mingw 里 make 了一下,很多错误。好久不写 makefile 了,还是省点事儿,不用 mingw 编译了,直接上 VS2010。开 VS2010,建工程,对于编译器 luac 和解释器 lua 分别建工程,很顺利的编译出 lua 和 luac。因为 Lua 是用 ANSI C 写的,所以在跨平台方面还是没问题的。
编译时又出现了 error C2099: initializer is not a constant 这个错误,修改方式和以前一样,如下:
---------------------------------------------------------
iolib.c 19行
static FILE *in=stdin, *out=stdout;
改为
static FILE *in=NULL, *out=NULL;

iolib_open 中给 in 和 out 赋值:
in=stdin; out=stdout;
---------------------------------------------------------
两个工程所用到的文件分别如下。
luac:src 目录里所有的,include 目录里所有的。
lua : src 目录里(除 luac 目录里的),include 目录里所有的,clients 目录里所有的。
建工程时建空的 win32 命令行程序,可以简单的建个代码目录,把上面说到的目录里的文件都拷贝过来。在工程里添加已存在文件,把代码目录里的所有文件添加就可以了。

在 Linux 里编译了一下,把之前的那个 iolib.c 里的错误修改之后,make 很顺利的过了。
果然,开源的世界里 Linux 才是标准平台。这也就是为什么你发现很多开源的软件在 Windowns 里没有或者不好用的原因,因为那软件一开始就是在 Linux 里开发出来的,只是后来发现用的人多了,才被移植到 Windows 里的,所以才有了各种不愉快。当然,这就是另一个问题了,这里就不讨论这个问题了。

© 著作权归作者所有

上一篇: Lua2.4 文档简介
下一篇: Lua1.1 其它
晓寒
粉丝 35
博文 119
码字总数 133745
作品 0
海淀
私信 提问
Lua2.4 字符串相关 tree.c

Lua 中字符串管理是核心内容之一(另一个当然就是表的管理)。 Lua 脚本中用到的字符串,解析时用到的符号,及一些运行时相关的字符串都保存在全局字符串表中,全局字符串表就是 tree.c 中的...

晓寒
2014/10/08
132
0
Lua2.4 场景恢复 undump.c

这一节看看 luaI_undump1 是如何场景恢复的。 /*** load one chunk from a file.** return list of functions found, headed by main, or NULL at EOF.*/TFunc luaI_undump1(FILE D){ while ......

晓寒
2014/10/21
106
0
Lua2.4 执行之前 opcode.c

上节说到了 luadofile 执行脚本文件,或者编译过的脚本二进制文件。 这节看下,Lua 是如何区别这两种文件的,以及虚拟机在开始执行字节码之前,程序里面都发生了什么? lua.c 里面的调用了 ...

晓寒
2014/10/16
224
0
Lua2.4 解释器入口 lua.c

开始解释器篇。 解释器部分会写几节还说不准,因为,不少相关内容在之前的版本中是有覆盖到的。 同样,还是从解释器入口的 main 函数说起。 int main (int argc, char *argv[]){ int i; int ...

晓寒
2014/10/14
227
0
Lua2.4 编译器入口 luac.c

luac.c 是编译器 luac 的入口文件。 老规矩,从 main 函数看起,看看这个过程中程序都做了些什么? int main(int argc, char* argv[]){ char d="luac.out"; / default output file / int i; ......

晓寒
2014/10/04
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

PCB设计-Allegro软件入门系列-铺铜操作(下)

铺铜是PCB很常见的操作,PCB的敷铜一般都是覆地铜,增大地线面积,有利于地线阻抗降低,使电源和信号传输稳定,在高频的信号线附近敷铜,可大大减少电磁辐射干扰,起屏蔽作用。 本讲讲解啊一...

demyar
7分钟前
1
0
如何通过WASI SDK 在Linux上编译ZXing C++

Mozilla在今年三月份的时候公布了WASI。WASI的目标就是让WebAssembly在任何地方都可以运行,而不仅仅像现在这样只能运行在Node.js和Web浏览器中。WASI目前依然处于初级阶段,这篇文章分享下如...

yushulx
9分钟前
1
0
.Net界面开发神器—DevExpress官方汉化包免费下载!还在等什么?

点击获取DevExpress v19.1.7新版试用下载 DevExpress Localization Service允许您创建一组自定义的附属程序集,要将语言包添加到程序集中,请查看本文中为大家列出的对应版本的汉化包,下载并...

FILA6666
9分钟前
2
0
php生成二维码

        header('Content-Type: image/png');        //清除缓冲区,防止之前面不知道的情况下被加头部信息导致不显示图片内容        ob_clean();        $...

横着走的螃蟹
15分钟前
2
0
伪类和伪元素

伪类和伪元素 伪类和伪元素,对于绝大多数同学来说,都是耳熟能详的名字,但确实又有很多人搞不清楚它们之间的区别,以致于混淆概念。而当概念都混淆的时候,也往往意味着你不会经常使用它,...

不负好时光
17分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部