2010-07-15 14 views
5

में एक सी मॉड्यूल लोड हो रहा है मैं लूआ में प्रोग्राम लूका प्रोग्राम (प्रोग्रामिंग लुआ, अध्याय 30 पर वर्णित) लोड करने और किसी भी तरह से फूलिंग करने की कोशिश कर रहा हूं। मैं इसका अनुसरण कर रहा हूं - http://www.lua.org/pil/26.2.html मेरा सी मॉड्यूल लुआ में प्राप्त करने के लिए। अनुसरण कर रहे हैं चरण हैं, जो मैं कर लिया है:लुआ

  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. लुआ दुभाषिया के लिए चला गया और यह निम्न त्रुटियों दिया:

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

ऐसा लगता है कि मॉड्यूल पंजीकृत नहीं किया है, मैं क्या लुआ से क्या करने की जरूरत है? समय छोटा है और मैं कुछ ग़लत गलत कर रहा हूं, किसी भी दिशा का स्वागत किया जाएगा।

धन्यवाद,
सयान

+0

लुआ का कौन सा संस्करण आप उपयोग कर रहे हैं? ऑनलाइन पीआईएल पुराना है –

+0

मै मैकपोर्ट्स से लुआ 5.1.4 डाउनलोड किया। – Sayan

उत्तर

7

सबसे आसान तरीका है किसी साझा लाइब्रेरी बना सकते हैं और गतिशील रूप से आपकी सी मॉड्यूल लोड करने के लिए है। इस तरह लुआ दुभाषिया के पुनर्निर्माण से बचाता है। वहाँ http://www.tecgraf.puc-rio.br/~lhf/ftp/lua/install.html में http://www.tecgraf.puc-rio.br/~lhf/ftp/lua/ में कुछ उदाहरण हैं और कारण हो सकते हैं और http://lua-users.org/wiki/BuildingModules

+0

धन्यवाद मैं उन्हें कोशिश करूँगा! – Sayan

1

यहाँ लुआ के लिए एक सी पुस्तकालय (, लुआ 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 चलाएं। यह आपके प्लेटफार्म के लिए सही झंडे के साथ सी कोड का निर्माण करेगा।

आपका मॉड्यूल अब उपयोग करने के लिए तैयार है!

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