2012-02-24 50 views
5

一个非常基本的问题,我想:luabind:无法调用诸如打印基本卢阿功能的toString

的C++代码,调用LUA看起来是这样的:

lua_State* m_L; 
m_L = lua_open(); 
luabind::open(m_L); 
luaL_dofile(m_L, "test.lua"); 
try { 
    luabind::call_function<void>(m_L, "main"); 
} catch (luabind::error& e) { 
    std::string error = lua_tostring(e.state(), -1); 
    std::cout << error << std::endl; 
} 
lua_close(m_L); 

现在test.lua有下列内容:

function main() 
print "1" 
end 

在执行时收到错误:

test.lua:2: attempt to call global 'print' (a nil value) 

问题是什么?它与环境有关吗?我认为像print这样的功能是在全球环境中定义的。为什么没有找到呢?

非常感谢。

+0

好吧,我想通了:luaopen_base (M_L);需要在lua_open() – 2012-02-24 13:17:59

+0

之后调用,如果您打算使用这些库,则需要调用luaopen_string(m_L),luaopen_math(m_L)等来打开相应的内置lua库。 – 2012-02-24 15:41:56

+0

@ chris.schuette:您应该回答自己的问题并接受该答案(从而将问题标记为正在完成)或删除问题。 – 2012-02-24 16:48:04

回答

6

正如你计算出来的,你必须致电luaopen_base得到print和其他基函数。然后,你需要调用luaopen_stringluaopen_math,获得基本的模块和功能而不是手工编写了这一切的,可以用luaL_openlibs一次加载所有的Lua基础功能:

lua_State* m_L = luaL_newstate(); 
luaL_openlibs(m_L);