2010-07-15 76 views
5

我正在嘗試將lproc程序的例子(介紹編程Lua,第30章)加載到Lua中,並以某種方式弄髒了它。我正在關注這個 - http://www.lua.org/pil/26.2.html讓我的c模塊進入lua。以下是我所採取的步驟:在Lua中加載一個C模塊

  1. 我有一個lproc.h和lproc.c(含正是在這本書的第30章中規定的功能)。我編譯lproc.c爲--- gcc -c lproc.c -DLUA-USERCONFIG = \「lproc.h \」

  2. 我從lproc.o中創建了一個庫,命名相同。

  3. 然後按照指示編譯lua.c。我的頭文件包含宏LUA_EXTRALIBS和方法聲明。

  4. 走到Lua解釋,它給了以下錯誤:

 
> require "lproc" 
stdin:1: module 'lproc' not found: 
    no field package.preload['lproc'] 
    no file './lproc.lua' 
    no file '/opt/local/share/lua/5.1/lproc.lua' 
    no file '/opt/local/share/lua/5.1/lproc/init.lua' 
    no file '/opt/local/lib/lua/5.1/lproc.lua' 
    no file '/opt/local/lib/lua/5.1/lproc/init.lua' 
    no file './lproc.so' 
    no file '/opt/local/lib/lua/5.1/lproc.so' 
    no file '/opt/local/lib/lua/5.1/loadall.so' 
stack traceback: 
    [C]: in function 'require' 
    stdin:1: in main chunk 
    [C]: ? 

看來這個模塊沒有得到註冊,我需要從Lua呢?時間很短,我正在做一些可怕的錯誤,任何方向都會受到歡迎。

感謝,
薩揚

+0

您使用的是哪個版本的Lua?在線PIL已經過時 – 2010-07-15 23:32:43

+0

我從Macports下載了Lua 5.1.4。 – Sayan 2010-07-16 01:16:10

回答

1

這裏是建設Lua的C庫(工作在Lua 5.1-5.3和LuaJIT,任何平臺)的完整,完全便攜式小例子:

有了這個example.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; 
} 

將這個rockspec文件在同一目錄下,命名爲example-1.0-1.rockspec

package = "example" 
version = "1.0-1" 
source = { 
    url = "." -- not online yet! 
} 
build = { 
    type = "builtin", 
    modules = { 
     example = "example.c" 
    } 
} 

然後,運行luarocks make。它將爲您的平臺構建帶有正確標誌的C代碼。

您的模塊現在可以使用了!

Lua 5.3.3 Copyright (C) 1994-2016 Lua.org, PUC-Rio 
> example = require("example") 
> print(example.hello()) 
Hello, world! 
>