在Lua中加载C模块

在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解释器,它给出了以下错误:

我试图将示例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解释器,它给出了以下错误:

  • >需要“lproc” 标准输入:1:未找到模块“lproc”: 无字段包。预加载['lproc'] 没有文件“/lproc.lua” 没有文件“/opt/local/share/lua/5.1/lproc.lua” 没有文件“/opt/local/share/lua/5.1/lproc/init.lua” 没有文件“/opt/local/lib/lua/5.1/lproc.lua” 没有文件“/opt/local/lib/lua/5.1/lproc/init.lua” 没有文件“./lproc.so” 没有文件“/opt/local/lib/lua/5.1/lproc.so” 没有文件“/opt/local/lib/lua/5.1/loadall.so” 堆栈回溯: [C] :在函数“require”中 stdin:1:在主块中 [C] :? 似乎模块没有注册,我需要从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!
    >