2012-01-20 3 views
32

일부 내 보낸 함수를 호출하는 루아 스크립트를 컴파일하고 결과 바이트 코드를 파일에 저장 한 다음이 바이트 코드를로드하고 실행합니다. 이 작업을 수행하는 방법에 대한 예제를 발견했습니다. 이 작업을 수행하는 방법에 대한 예제가 있습니까? 어떻게해야합니까?lua 코드를 컴파일하고 바이트 코드를 저장 한 다음 실행하십시오

편집 : 이것은 모두 아주 간단하다 내가 루아 + Luabind (C++를)

답변

51

사용하고 있습니다.

우선을 실행하지 않고 Lua 스크립트 을로드하십시오. Lua 상태와 내 보낸 함수를 연결했는지는 중요하지 않습니다. 스크립트 파일을 컴파일하는 것뿐입니다.

luaL_loadfile은 C 표준 라이브러리 함수를 사용하여 디스크에서 파일을 읽고 lua_State에로드 할 수 있습니다. 또는 파일을 직접 문자열로로드하고 luaL_loadstring을 사용하여 lua_State에로드 할 수 있습니다.

이 두 함수는 모두 the documentation for lua_load에 따라 반환 값과 컴파일러 오류를 내 보냅니다.

컴파일이 성공적으로 수행 된 경우에는 컴파일 된 Lua 청크가 스택 맨 위에 Lua 함수로 포함됩니다. 컴파일 된 바이너리를 얻으려면 lua_dump 함수를 사용해야합니다. 데이터를 전달하기 위해 콜백 인터페이스를 사용하기 때문에 다소 복잡합니다. the documentation for details을 참조하십시오.

그 과정이 끝나면 컴파일 된 루아 바이트 코드가 생깁니다. 그 파일을 원하는 파일에 저장하십시오. 그냥 기억하십시오 : 이진으로 작성하고 텍스트 번역으로 작성하지 마십시오.

바이트 코드를로드 할 때 ... 정확히 전에 수행 한 작업 만 수행하면됩니다. 음, 거의. 루아는 발견 된 "문자열"이 루아 소스 문자열 또는 바이트 코드임을 탐지하는 방법을 가지고 있습니다. 그래서 예, 이전처럼 luaL_loadfile으로 바이트 코드를로드 할 수 있습니다.

차이점은 luaL_loadstring을 바이트 코드와 함께 사용할 수 없다는 것입니다. 이 함수는 NULL로 끝나는 문자열을 예상합니다. 바이트 코드에는 NULL 문자가 포함되어있어 모든 것을 망칠 수 있습니다. 그래서 파일 IO를 직접하고 싶다면 (특별한 파일 시스템이나 뭔가를 사용하고 있기 때문에) lua_load을 직접 사용해야합니다. 또한 lua_dump과 같은 콜백 인터페이스를 사용합니다. 따라서 read up on how to use it.

+1

위와 같은 소리 답변이 더 많았 으면 좋겠어요! – vines

+0

위대한 답변, 그게 정확히 내가 생각했던 것입니다. 그러나 나는 무엇을 사용해야할지 몰랐습니다. 나는 그것을 밖으로 시도 할 것이다. 이제 FAQ (FAQ) 나 문서에 이런 (명확하고 객관적인) 것을 넣는 것이 얼마나 힘든가요? 고맙습니다! – WoLfulus

+5

@WoLfulus : "루아로드 바이트 코드"를 봤다면, [맨 처음 링크] (http://csl.sublevel3.org/lua/)는 당신이 알아야 할 모든 것을 말했을 것입니다. 그래서 이것에 대한 FAQ가 필요하지 않습니다. 그리고 응용 프로그램'luac '은 이미 Lua 스크립트를 바이트 코드로 미리 컴파일 할 수 있기 때문에이를 수행 할 프로그램조차 필요하지 않습니다. 정말, FAQ는 필요 없습니다. Google의 적절한 사용. –

관련 문제