2012-02-24 1 views
5

는 아주 기본적인 질문은 내가 추측 :luabind : 인쇄와 같은 기본 루아 함수를 호출 할 수 없습니다, tostring

는 C++ 코드는 루아를 호출하면 다음과 같다

:

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가있다 다음 내용 :

test.lua:2: attempt to call global 'print' (a nil value) 
,536 : 실행시

function main() 
print "1" 
end 

나는 오류가 나타납니다

무엇이 문제입니까? 그것은 환경과 관련이 있습니까? 나는 인쇄와 같은 기능이 지구 환경에 정의되어 있다고 생각했다. 그런데 왜 발견되지 않습니까?

대단히 감사합니다.

+0

확인이 내가 그것을 알아 냈 : luaopen_base를 (m_L); lua_open() –

+0

이후에 호출해야 할 필요가 있습니다. luaopen_string (m_L), luaopen_math (m_L) 등을 호출하여 적절한 루아 라이브러리를 빌드해야합니다. –

+0

@ chris.schuette : 자신 만의 질문에 답하고 그 대답을 받아 들여야합니다 (따라서 끝나는 것으로 표시됨). 질문을 삭제하십시오. –

답변

6

알아 낸대로 luaopen_base으로 전화하여 print 및 기타 기본 기능을 사용하십시오. 그런 다음에 기본 모듈과 기능을 얻기 위해, luaopen_string, luaopen_math를 호출 할 필요가 대신 수동으로 모두 밖으로 쓰는, luaL_openlibs로 한 번에 모든 루아의 기본 기능을로드 할 수 있습니다.

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