日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

C++ Linking and running LuaJit compiled files with loadbuffer and runbuffer

 quasiceo 2014-01-12

I have compiled test.lua with LuaJit into test.obj and test.h. How do I correctly use the loadBuffer or runBuffer functions that I have? All I need to find out is basically how to place test.lua, test.obj and test.h into the command but I just cant, Ive tried hundreds of ways but nothing seems to work. I have stripped some other functions off from main and so forth that it would just leave the problem visible and not other things that work just fine.

C++: This is the main

    int main(int argc, const char* argv[])
    {
        std::vector<std::string> args(argv, argv + argc);

        g_lua.loadBuffer("test.lua", "test.obj")
    // I have tried both, runBuffer and loadBuffer but I just cant get it right, it always fails.


    }

Here is the loadBuffer function:

void LuaCodes::loadBuffer(const std::string& buffer, const std::string& source)
{
    int ret = luaL_loadbuffer(L, buffer.c_str(), buffer.length(), source.c_str());
    if(ret != 0)
        throw LuaException(popString(), 0);
}

Here is the runBuffer function:

    void LuaCodes::runBuffer(const std::string& buffer, const std::string& source)
    {
        loadBuffer(buffer, source);
        safeCall(0, 0);
    }

Here are the insides of test.h:

#define luaJIT_BC_test_SIZE 1186
static const char luaJIT_BC_test[] = {
27,76,74,1,2,154,9,2,0,12,0,47,0,151,1,52,0,0,0,55,0,1,0,52,1,2,0,55,1,3,1,62,
1,1,2,52,2,4,0,55,2,5,2,62,2,1,2,37,3,6,0,36,1,3,1,62,0,2,1,52,0,0,0,55,0,7,0,
52,1,8,0,55,1,9,1,37,2,10,0,62,1,2,0,61,0,0,1,52,0,0,0,55,0,7,0,52,1,4,0,55,1,
11,1,62,1,1,2,37,2,12,0,52,3,4,0,55,3,13,3,62,3,1,2,37,4,14,0,52,5,4,0,55,5,
15,5,62,5,1,2,37,6,16,0,52,7,4,0,55,7,17,7,62,7,1,2,37,8,18,0,52,9,4,0,55,9,
19,9,62,9,1,2,37,10,20,0,52,11,4,0,55,11,21,11,62,11,1,2,36,1,11,1,62,0,2,1,
52,0,2,0,55,0,22,0,52,1,2,0,55,1,3,1,62,1,1,2,37,2,23,0,36,1,2,1,41,2,2,0,62,
0,3,2,14,0,0,0,84,0,4,128,52,0,0,0,55,0,24,0,37,1,25,0,62,0,2,1,52,0,2,0,55,0,
22,0,52,1,2,0,55,1,3,1,62,1,1,2,37,2,26,0,36,1,2,1,41,2,2,0,62,0,3,2,14,0,0,0,
84,0,4,128,52,0,0,0,55,0,24,0,37,1,27,0,62,0,2,1,52,0,2,0,55,0,22,0,52,1,2,0,
55,1,3,1,62,1,1,2,37,2,28,0,36,1,2,1,41,2,2,0,62,0,3,1,52,0,2,0,55,0,29,0,52,
1,4,0,55,1,5,1,62,1,1,0,61,0,0,1,52,0,2,0,55,0,30,0,37,1,31,0,37,2,32,0,41,3,
2,0,62,0,4,1,52,0,33,0,55,0,34,0,37,1,35,0,62,0,2,1,52,0,36,0,55,0,37,0,62,0,
1,1,52,0,36,0,55,0,38,0,39,1,99,0,62,0,2,1,52,0,36,0,55,0,39,0,37,1,40,0,62,0,
2,1,52,0,36,0,55,0,39,0,37,1,41,0,62,0,2,1,52,0,36,0,55,0,38,0,39,1,243,1,62,
0,2,1,52,0,36,0,55,0,39,0,37,1,42,0,62,0,2,1,52,0,36,0,55,0,38,0,39,1,231,3,
62,0,2,1,52,0,36,0,55,0,39,0,37,1,43,0,62,0,2,1,52,0,36,0,55,0,38,0,39,1,15,
39,62,0,2,1,37,0,31,0,52,1,4,0,55,1,5,1,62,1,1,2,37,2,44,0,36,0,2,0,52,1,2,0,
55,1,45,1,16,2,0,0,62,1,2,2,15,0,1,0,84,2,3,128,52,1,46,0,16,2,0,0,62,1,2,1,
71,0,1,0,11,100,111,102,105,108,101,15,102,105,108,101,69,120,105,115,116,115,
7,114,99,19,103,97,109,101,95,105,110,116,101,114,102,97,99,101,11,99,108,105,
101,110,116,12,103,97,109,101,108,105,98,12,99,111,114,101,108,105,98,23,101,
110,115,117,114,101,77,111,100,117,108,101,76,111,97,100,101,100,20,97,117,
116,111,76,111,97,100,77,111,100,117,108,101,115,20,100,105,115,99,111,118,
101,114,77,111,100,117,108,101,115,14,103,95,109,111,100,117,108,101,115,17,
47,99,111,110,102,105,103,46,111,116,109,108,9,108,111,97,100,14,103,95,99,
111,110,102,105,103,115,11,46,111,116,112,107,103,6,47,25,115,101,97,114,99,
104,65,110,100,65,100,100,80,97,99,107,97,103,101,115,22,115,101,116,117,112,
85,115,101,114,87,114,105,116,101,68,105,114,9,109,111,100,115,56,85,110,97,
98,108,101,32,116,111,32,97,100,100,32,109,111,100,117,108,101,115,32,100,105,
114,101,99,116,111,114,121,32,116,111,32,116,104,101,32,115,101,97,114,99,104,
32,112,97,116,104,46,12,109,111,100,117,108,101,115,53,85,110,97,98,108,101,
32,116,111,32,97,100,100,32,100,97,116,97,32,100,105,114,101,99,116,111,114,
121,32,116,111,32,116,104,101,32,115,101,97,114,99,104,32,112,97,116,104,46,
10,102,97,116,97,108,9,100,97,116,97,18,97,100,100,83,101,97,114,99,104,80,97,
116,104,17,103,101,116,66,117,105,108,100,65,114,99,104,15,32,102,111,114,32,
97,114,99,104,32,17,103,101,116,66,117,105,108,100,68,97,116,101,16,41,32,98,
117,105,108,116,32,111,110,32,19,103,101,116,66,117,105,108,100,67,111,109,
109,105,116,7,32,40,21,103,101,116,66,117,105,108,100,82,101,118,105,115,105,
111,110,10,32,114,101,118,32,15,103,101,116,86,101,114,115,105,111,110,6,32,
12,103,101,116,78,97,109,101,42,61,61,32,97,112,112,108,105,99,97,116,105,111,
110,32,115,116,97,114,116,101,100,32,97,116,32,37,98,32,37,100,32,37,89,32,37,
88,9,100,97,116,101,7,111,115,9,105,110,102,111,9,46,108,111,103,19,103,101,
116,67,111,109,112,97,99,116,78,97,109,101,10,103,95,97,112,112,15,103,101,
116,87,111,114,107,68,105,114,16,103,95,114,101,115,111,117,114,99,101,115,15,
115,101,116,76,111,103,70,105,108,101,13,103,95,108,111,103,103,101,114,0
};
asked Nov 8 '13 at 1:29
hennessy
9817


 

 
That was the question I used at first but after trying and trying I couldnt get it right. –  hennessy Nov 8 '13 at 9:13
add comment

1 Answer

For luaL_loadbuffer (and hence LuaCodes::loadBuffer) the 1st argument should be a string containing the bytecode and the 2nd argument should be a human-readable name (e.g. the filename that the bytecode was compiled from.)

Try:

#include "test.h"

// ...

int main(int argc, const char* argv[])
{
    // ...

    std::string bytecode(luaJIT_BC_test, luaJIT_BC_test_SIZE);
    g_lua.loadBuffer(bytecode, "@test.lua")
}
answered Nov 8 '13 at 2:05
finnw
22.6k564130


 
I get these errors trying to do that:--------- In function 'int main(int, const char**)':|--------------- 'luaJIT_BC_test' was not declared in this scope|------------- 'luaJIT_BC_test_SIZE' was not declared in this scope|------------- could not convert 'g_lua.LuaInterface::loadBuffer(((const string)(& bytecode)), (* & std::basic_string<char>(((const char*)"@init.lua"), ((const std::allocator<char>)(& std::allocator<char>())))))' from 'void' to 'bool'|---------------- –  hennessy Nov 8 '13 at 9:11
1  
@hennessy did you #include "test.h" in your main.cpp? –  greatwolf Nov 8 '13 at 9:18

 
Yes I did, I actually just got rid of the first two errors. Now this is left: In function 'int main(int, const char**)':| ------------ could not convert 'g_lua.LuaInterface::loadBuffer(((const string)(& bytecode)), (* & std::basic_string<char>(((const char*)"test.lua"), ((const std::allocator<char>)(& std::allocator<char>())))))' from 'void' to 'bool'| ------------- I wonder if its still an include error or something wrong in the loadBuffer code? –  hennessy Nov 8 '13 at 9:20

 
Ive gotten it to work, but I dont understand why it works like this: no matter what I put instead of "@test.lua", lets say I put "@plalpalpaplalp.lua" that doesnt exist, for some reason the program still starts. Its as if it doesnt matter whats inside there because it already links it statically elsewhere. Am I correct? I used the runBuffer instead of loadBuffer, maybe it has something to do with it? –  hennessy Nov 8 '13 at 10:02
2  
Last parameter to luaL_loadbuffer is just a name -- a label that's used to identify script errors in the stacktrace. It can be anything you want. –  greatwolf Nov 8 '13 at 10:19

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多