2014-04-05 6 views
1

모든 루아 파일을 하나의 실행 파일에 포함하도록 C++ 프로젝트를 빌드하려면 어떻게해야합니까? 나는 사람들이 루아 파일을 편집하고 게임을 바꿀 수 없도록하고 싶다.프로젝트와 함께 루아 스크립트 빌드하기

윤리적일까요?

+1

도 http://stackoverflow.com/questions/194520/creating-standalone-lua-executables 참조하십시오. – lhf

+1

[premake] (https://github.com/annulen/premake/blob/master/scripts/embed.lua)와 같이 텍스트로 처리하고 문자열을 정적으로 난독 화 (암호화 또는 압축) 할 수도 있습니다. 스크립트가 더 어려워 질 것입니다. –

답변

1

글쎄, 당신은 당신의 실행 파일로 모든 루아 소스를 넣어 원하는, 그래서 당신이 필요합니다

  • 루아 파일에 대한 매핑 파일 이름의 의미 :

    char lua_files[]={ 
        "filename1\0filecontents1", 
        "filename2\0filecontents2", 
        0, 
    }; 
    

    이 수를 빌드 할 때 Lua 파일의 디렉토리를 읽는 스크립트에 의해 자동으로 생성 될 수 있습니다.
    선택적으로, 파일을 미리 컴파일 할 수도 있으므로 embeddded Lua 라이브러리에서 파서를 제거 할 수 있습니다.

  • 사용자 정의 로더 :
    배열을 검색하고 찾은 파일 내용을 포함하는 문자열을 루아 문자열로 반환하는 간단한 Lua C 함수를 작성하십시오.
    package.searchers에 등록하여 등록하십시오.

나중에 사용자 지정 스크립트를 어떻게 든로드 할 수있게하려면 이전 검색자를 유지하고 원본에없는 파일이 필요하도록하십시오.

+0

죄송합니다. 나는 당신이 의미하는 바를 머리 속에 쓰지 못합니다. –

+0

@Ethan : 정교합니다. – Deduplicator

+0

루아 파일'test.lua'가 lua_files []'lua \ test.lua'에'lua' 폴더에 있다고 가정 해 봅시다. 그냥 설명을 원해. –

2

사용 LuaJIT의 "embedded bytecode"기능 :

정적 응용 프로그램에서 모듈의 바이트 코드를 삽입하려면 오브젝트 파일을 생성하고 당신의 응용 프로그램에 연결합니다.

require()는 내 보낸 심볼 (Windows의 경우 * .exe 또는 lua51.dll)과 package.cpath의 공유 라이브러리에서 내장 바이트 코드 데이터를로드하려고합니다.

예 :

luajit -b test.lua test.obj     # Generate object file 
# Link test.obj with your application and load it with require("test") 
관련 문제