Using Lua in C Programs

研究了一下Lua怎么玩,下载预编译的当然没意思,所以当然是用源码自己编译。Lua使用非常纯净的C语言写成,所以对编译器的要求炒鸡低,基本所有C编译器都能编译Lua。

先从Lua官网下载最新版的源码,源码包目录非常简单,doc目录下是文档,src目录下是源码。所有的.c.h文件都在src目录下。直接调用编译器编译即可。

要注意的有"lua.c"和"luac.c"这两个文件,其中lua是指的解释器,而luac是编译器,两个都有main函数,如果一起编译的话链接会出问题。对于想用本办法解决问题的人来说很简单,把luac.c删掉,剩下的.c文件可以编译成lua.exe;放回去,把lua.c删掉,剩下的就能编译出luac.exe。如果把这两个文件都删掉,剩下的就可以编译成Lua语言库。

更高级一点的操作方法,用-c参数可以先把所有.c文件编译成.obj(windows)或者.o(*unix)文件,然后根据需要链接。

cl /c *.c
# 删掉luac.obj链接出lua.exe
del luac.obj
link /out:lua.exe *.obj
# 把lua.obj也删了,编译lua.lib和lua.dll
del lua.obj
link /DLL /out:lua.dll *.obj
lib /out:lua.lib *.obj
# 再补上luac.obj,链接luac.exe
cl /c luac.c
link /out:luac.exe *.obj
# 删掉所有.obj
del *.obj

最终得到四个文件:lua.exe、luac.exe和lua.lib、lua.dll。

在C程序中引入Lua

先写个简单的例子,以后有机会(再研究研究)之后或许可以再写一篇文章详细记录。

#include <stdio.h>
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>

static int LUA_MyPrint(lua_State* L) {
    // 从栈中弹出一个字符串
	const char* msg = lua_tostring(L, 1);
    // 实现输出功能
    printf("Lua: %s", msg);
	return 0;
}

int main() {
    lua_State *L = luaL_newstate(); // 创建一个Lua虚拟机
    // 添加自定义函数
    luaL_openlibs(L);
    lua_pushcfunction(L, LUA_MyPrint);
    lua_setglobal(L, "MyPrint");
    // 运行run.lua文件
    if(luaL_dofile(L, "init.lua"))
        printf("运行失败");
    else
        printf("运行成功");
    return 0;
}

然后在run.lua文件里这么写:

MyPrint("hello, world")

JunDao

LuaC

778 Words

2020-03-22 17:40 +0800