自己编译lua源码

Posted on 2018-02-01 09:19  不断学习中渐渐不彷徨  阅读(7678)  评论(0编辑  收藏  举报

对于一个开源工程,开始学习它的第一步自然是编译工程。

使用vc编译lua,在网上已有许多介绍,但“纸上得来终觉浅”,自己走一遍还是有必要的。

步骤如下:

1.下载源代码,从lua.org下载最新源代码包lua-5.2.2,解压到本地

2.打开vc建立一个solution,就叫lua.sln

3.创建一个名为liblua的project(lua库),添加除lua.c和luac.c以外的所有代码文件,将lua库编译为dll(这里注意,需要在预处理器中添加LUA_BUILD_AS_DLL和LUA_CORE两个宏)

4.创建一个名为lua的project(lua解释器),添加除luac.c以外的所有代码文件

5.创建一个名为luac的project(lua编译器),添加除lua.c以外的所有代码文件

6.编译、链接即可。注意lua和luac两个工程没有依赖liblua动态库,而是直接使用的源代码,这是因为luac里用到的一些API缺省情况下是不被liblua导出的,需要改些设置,所以直接用源代码省事了。

生成结果:

  lua库:liblua.dll、liblua.lib

  lua解释器:lua.exe:

  lua编译器:luac.exe

 

完成了编译,下一步当然是顺便运行个Hello World玩玩:

1.打开记事本,输入如下一行代码:

print("Hello World!")

保存成hello.lua

2.启动命令行,进入lua.exe所在目录,运行命令行:

>lua hello.lua

显示输出:Hello World!

 

=========================================================================

 

    与 平台无关。Lua几乎可以运行在所有我们听说过的系统上,如NextStep、OS/2、PlayStation II (Sony)、Mac OS-9、OS X、BeOS、MS-DOS、IBM mainframes、EPOC、PalmOS、MCF5206eLITE Evaluation Board、RISC OS,及所有的Windows和Unix。Lua不是通过使用条件编译实现平台无关,而是完全使用ANSI (ISO) C,这意味着只要你有ANSI C编译器你就可以编译并使用Lua。

 

    要在C++中使用Lua非常简单,不管是GCC,VC还是C++Builder, 最简单的方法就是把Lua源码中除lua.c,luac.c和print.c以外的所有c文件与你的代码一起编译链接(或加入到工程中)即可。

 

    因为Lua是用C语言写的,除非编译lua库时指定编译器强制以C++方式编译,否则在C++工程中应该这样包含lua头文件:

extern "C" {

#include "lua.h"

#include "lualib.h"

#include "lauxlib.h"

}

 

======================================================================

 

lua 5.2.3 VS2012编译方法

准备:

  1. 新建一个空解决方案
  2. 打开解决方案目录,新建文件夹“include”和“src”
  3. 复制源码中所有.h文件到include目录,所有.c文件到src目录
  4. 删除src目录下的lua.c、luac.c

编译dll:

  1. 新建一个win32 dll的空项目
  2. 修改包含目录,在其中添加include目录
  3. 把src目录下的所有文件全部加入项目
  4. 添加define:LUA_BUILD_AS_DLL、_CRT_SECURE_NO_WARNINGS
  5. 可选:修改属性→C/C++→代码生成→运行库,为多线程,不依赖VC运行库dll
  6. 可选:新建一个资源文件,设置dll的版本信息

编译静态库:

  1. 新建一个win32 静态库的空项目
  2. 修改包含目录,在其中添加include目录
  3. 把src目录下的所有文件全部加入项目
  4. 添加define:_CRT_SECURE_NO_WARNINGS

 

 

lua编译器和lua解释器有什么区别,都是用来干什么的?

 

lua编译器把lua脚本编译成lua虚拟机的指令。(bytecode)
lua解释器除了有编译器外还有虚拟机,可以执行编译后的指令。