2012-01-20 11 views
32

मैं एक lua स्क्रिप्ट है कि कुछ निर्यात कार्यों कॉल संकलित करने के लिए एक फाइल करने के लिए जिसके परिणामस्वरूप बाईटकोड बचाने के लिए और फिर इस बाईटकोड लोड और निष्पादित यह कोशिश कर रहा हूँ, लेकिन मैं नहीं है यह कैसे करें इस पर कोई उदाहरण मिला। क्या ऐसा करने के लिए कोई उदाहरण उपलब्ध है? मैं यह कैसे कर सकता हूँ?संकलित lua कोड, स्टोर बाईटकोड तो लोड और निष्पादित यह

संपादित करें: मैं लुआ + Luabind (C++)

उत्तर

51

उपयोग कर रहा हूँ यह सब बहुत सरल है।

सबसे पहले, आप इसे लागू करने वाले के बिना लुआ स्क्रिप्ट लोड करते हैं। इससे कोई फर्क नहीं पड़ता कि आपने अपने निर्यात किए गए कार्यों के साथ लुआ राज्य को जोड़ा है; आप जो भी कर रहे हैं वह स्क्रिप्ट फ़ाइल संकलित कर रहा है।

आप luaL_loadfile का उपयोग कर सकते हैं, जो डिस्क से फ़ाइल पढ़ने के लिए सी-मानक लाइब्रेरी फ़ंक्शंस का उपयोग करता है और इसे lua_State में लोड करता है। वैकल्पिक रूप से, आप स्वयं को एक स्ट्रिंग में फ़ाइल लोड कर सकते हैं और इसे का उपयोग lua_State में लोड करने के लिए कर सकते हैं।

इन कार्यों प्रति the documentation for lua_load के रूप में वापसी मूल्यों और संकलक त्रुटियों उत्सर्जित करेगा दोनों।

यदि संकलन सफल हुआ, तो lua_State अब ढेर के शीर्ष पर लूआ फ़ंक्शन के रूप में संकलित लुआ खंड है। संकलित बाइनरी प्राप्त करने के लिए, आपको lua_dump फ़ंक्शन का उपयोग करना होगा। यह अपेक्षाकृत जटिल है क्योंकि यह आपको डेटा पास करने के लिए कॉलबैक इंटरफ़ेस का उपयोग करता है। the documentation for details देखें।

है कि इस प्रक्रिया के बाद, आप संकलित लुआ बाइट कोड है। अपनी पसंद की एक फ़ाइल में उसे दिखाओ। बस याद रखें: इसे बाइनरी के रूप में लिखें, पाठ अनुवाद के साथ नहीं।

जब बाइट कोड लोड करने का समय आता है, तो आपको केवल से पहले क्या किया गया था। हां तकरीबन। लुआ में यह पता लगाने के लिए हेरिस्टिक्स है कि इसे "स्ट्रिंग" दिया जाता है जो लुआ स्रोत स्ट्रिंग या बाइट कोड है। तो हाँ, आप पहले की तरह luaL_loadfile के साथ बाइट कोड लोड कर सकते हैं।

अंतर यह है कि आप बाइट कोड के साथ luaL_loadstring उपयोग नहीं कर सकते है। वह फ़ंक्शन एक पूर्ण-समाप्त स्ट्रिंग की अपेक्षा करता है, जो खराब है। बाइट कोड इसमें न्यूल वर्णों को एम्बेड कर सकता है, जो सबकुछ खराब कर देगा। इसलिए यदि आप फ़ाइल IO स्वयं करना चाहते हैं (क्योंकि आप एक विशेष फाइल सिस्टम या कुछ का उपयोग कर रहे हैं), तो आपको सीधे lua_load का उपयोग करना होगा। जो lua_dump जैसे कॉलबैक इंटरफ़ेस का भी उपयोग करता है। तो read up on how to use it

+1

इच्छा है कि ऐसे कई ध्वनि उत्तर थे! – vines

+0

ग्रेट उत्तर, यह वही है जो मैंने सोचा था कि यह होगा, लेकिन मुझे नहीं पता था कि इसका उपयोग कैसे किया जाए। मैं इसे आज़माउंगा। अब मुझे बताएं, एफएक्यू में या यहां तक ​​कि दस्तावेज़ीकरण में ऐसा कुछ (स्पष्ट और उद्देश्य) डालना कितना मुश्किल है? धन्यवाद! – WoLfulus

+5

@WoLfulus: यदि आप "लुआ लोड बाइटकोड" गुगल करते हैं, तो [बहुत पहले लिंक] (http://csl.sublevel3.org/lua/) आपको वह सब कुछ बताता जो आपको जानने के लिए आवश्यक था। तो मुझे इस पर एक एफएक्यू की आवश्यकता नहीं दिख रही है। और एप्लिकेशन 'luac' पहले से ही बाइट स्क्रिप्ट को बाइटकोड में संकलित कर सकता है, इसलिए आपको इसे करने के लिए प्रोग्राम की भी आवश्यकता नहीं है। तो वास्तव में, एक एफएक्यू की कोई ज़रूरत नहीं है; Google का उचित उपयोग। –

संबंधित मुद्दे