lua 源码编译
本文介绍了使用 Visual Studio 编译 lua 源码的方法。
下载源码
源码下载在 这个页面
建立解决方案
建立一个空白解决方案,源码压缩包解压后,将 src 目录拷贝到解决方案根目录:

编译 lua library
在解决方案下建立一个静态库项目 lualib, 建立项目时选择空项目、取消预编译头。

在 lualib 项目上右键添加现有项,导航到刚刚拷贝的 src 目录,选择除了 lua.c, luac.c 之外的所有 .c 文件。

右键生成即可编译出 lualib.lib。
编译 lua 解释器
在解决方案下建立一个控制台项目 lua, 建立项目时选择空项目、取消预编译头。

在 lua 项目上右键添加现有项,导航到刚刚拷贝的 src 目录,选择 lua.c, lua.h 文件。

在 lua 项目上右键生成依赖项,让 lua 项目依赖于 lualib 项目。
在 lua 项目上右键属性-->链接器,设置附加库目录为 lualib 的输出目录,设置附加依赖项为 lualib.lib。这样 lua 项目就可以使用 lualib.lib 了。


右键生成即可编译出 lua.exe
双击 lua.exe 可以在控制台里执行 lua 代码:

编译 luac 编译器
在解决方案下建立一个控制台项目 luac, 建立项目时选择空项目、取消预编译头。
之后的设置流程跟 lua 项目的一样。只是添加现有项的时候只需要添加一个 luac.c 文件即可。
建立测试项目
在解决方案下建立一个控制台项目 luatest。
在 luatest项目上右键生成依赖项,让 luatest 项目依赖于 lualib 项目。
在 luatest项目上右键属性-->链接器,设置附加库目录为 lualib 的输出目录,设置附加依赖项为 lualib.lib。这样 luatest 项目就可以使用 lualib.lib 了。
在 luatest项目上右键属性-->C++, 设置附加包含目录为 $(SolutionDir)src:

输入测试代码:
#include "stdafx.h"
extern "C"
{
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
}
int main()
{
// 创建一个 lua 虚拟机
lua_State *L = luaL_newstate();
// 注册库对象到 lua 虚拟机中
luaL_openlibs(L);
// 将一段 lua 脚本转换成一个 lua function ,然后将这个 lua function 放到栈顶
luaL_loadstring(L, "print(\"hello lua!\")");
// 调用栈顶的 lua function
lua_pcall(L, 0, LUA_MULTRET, 0);
lua_close(L);
return 0;
}
右键生成即可编译出 luatest.exe
网友评论