在Lua中加载C模块
我试图将示例lproc程序(在第30章编程Lua中描述)加载到Lua中,但不知怎么搞砸了。我遵循这一点-将我的c模块放入lua。以下是我采取的步骤:在Lua中加载C模块,lua,Lua,我试图将示例lproc程序(在第30章编程Lua中描述)加载到Lua中,但不知怎么搞砸了。我遵循这一点-将我的c模块放入lua。以下是我采取的步骤: 我有一个lproc.h和lproc.c(正好包含本书第30章中列出的函数)。我将lproc.c编译为--gcc-cproc.c-DLUA-USERCONFIG=\“lproc.h” 我用lproc.o制作了一个图书馆,名字也一样 然后按照指示编译lua.c。我的头文件包含宏LUA_EXTRALIBS和方法声明 转到Lua解释器,它给出了以下错误:
Sayan最简单的方法是创建一个共享库并动态加载您的C模块。这种方法避免了必须重建Lua解释器。在和中有几个示例和解释,这里是一个完整的、完全可移植的为Lua构建C库的最小示例(适用于任何平台的Lua 5.1-5.3和LuaJIT): 使用此
示例.c
:
#include <lua.h>
int example_hello(lua_State* L) {
lua_pushliteral(L, "Hello, world!");
return 1;
}
int luaopen_example(lua_State* L) {
lua_newtable(L);
lua_pushcfunction(L, example_hello);
lua_setfield(L, -2, "hello");
return 1;
}
然后,运行luarocks make
。它将为您的平台构建具有正确标志的C代码
您的模块现在可以使用了
Lua 5.3.3 Copyright (C) 1994-2016 Lua.org, PUC-Rio
> example = require("example")
> print(example.hello())
Hello, world!
>
您正在使用哪个版本的Lua?在线PIL已过时,请从Macports下载Lua 5.1.4。
package = "example"
version = "1.0-1"
source = {
url = "." -- not online yet!
}
build = {
type = "builtin",
modules = {
example = "example.c"
}
}
Lua 5.3.3 Copyright (C) 1994-2016 Lua.org, PUC-Rio
> example = require("example")
> print(example.hello())
Hello, world!
>