Question

A very basic question i guess:

The C++ code, calling lua looks like this:

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);

now test.lua has the following contents:

function main()
print "1"
end

Upon execution I receive the error:

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

What is the problem? It has something to do with environments? I thought functions like print are defined in the global environment. Why is it not found then?

Thank you very much.

Was it helpful?

Solution

As you figured it out, you have to call luaopen_base to get print and other base functions. Then you need to call luaopen_string, luaopen_math, to get the basic modules and functions in. Instead of writing it all out manually, can load all Lua base function at once with luaL_openlibs:

lua_State* m_L = luaL_newstate();
luaL_openlibs(m_L);
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top