2010-07-15 26 views
5

Tôi đang cố gắng tải chương trình lproc mẫu (được mô tả trên Lập trình Lua, Chương 30) vào Lua và phạm lỗi bằng cách nào đó. Tôi đang theo dõi điều này - http://www.lua.org/pil/26.2.html để lấy mô-đun c của tôi vào lua. Sau đây là các bước tôi đã thực hiện:Tải một Mô-đun C trong Lua

  1. Tôi có lproc.h và lproc.c (chứa chính xác các chức năng được trình bày trong Chương 30 của cuốn sách). Tôi đang biên dịch lproc.c thành --- gcc -c lproc.c -DLUA-USERCONFIG = \ "lproc.h \"

  2. Tôi đã tạo một thư viện nằm ngoài lproc.o, được đặt tên giống nhau.

  3. Và sau đó biên dịch lua.c theo hướng dẫn. Các tệp tiêu đề của tôi chứa macro LUA_EXTRALIBS và các khai báo phương thức.

  4. Đã đi đến các thông dịch viên Lua và nó đã cho các lỗi sau đây:

 
> 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]: ? 

Dường như các mô-đun không được đăng ký, tôi sẽ cần phải làm gì từ Lua? Thời gian ngắn và tôi đang làm điều gì đó khủng khiếp sai, mọi hướng sẽ được hoan nghênh.

Cảm ơn,
Sayan

+0

Bạn đang sử dụng phiên bản Lua nào? PIL trực tuyến đã lỗi thời –

+0

Tôi đã tải xuống Lua 5.1.4 từ Macports. – Sayan

Trả lời

1

Đây là một ví dụ hoàn chỉnh và hoàn toàn di động tối thiểu của việc xây dựng một thư viện C cho Lua (chỉ hoạt động trong Lua 5,1-5,3 và LuaJIT, cho nền tảng có):

với điều này 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; 
} 

Đặt tập tin rockspec này trong cùng thư mục, đặt tên example-1.0-1.rockspec:

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

Sau đó, chạy luarocks make. Nó sẽ xây dựng mã C với các cờ chính xác cho nền tảng của bạn.

Mô-đun của bạn hiện đã sẵn sàng để sử dụng!

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