2008-10-11 19 views
33

¿Existe alguna manera fácil de crear archivos .exe independientes a partir de los scripts de Lua? Básicamente esto implicaría vincular el intérprete de Lua y los guiones.Creación de ejecutables Lua independientes

Creo que es posible (PLT Scheme permite la creación de ejecutables independientes de la misma manera), pero ¿cómo, exactamente?

Respuesta

27

Salida de srlua. Hace lo que necesitas.

Es de uno de los autores de Lua. En esta dirección también hay binarios de Windows precompilados, por lo que creo que sería mucho más fácil.

+0

Lamentablemente, srlua no funcionó para mí. La solución con luac/bin2c a continuación trabajó – Zane

+1

srlua distribuye binarios en su github repo- https: // github.com/LuaDist/srlua Funcionó bastante bien para mí: 'glue.exe srlua.exe my.lua my.exe' – noahp

3

Como dice '.exe' supongo que está buscando una solución de Windows. Una idea es simplemente agregar scripts a un ejecutable de intérprete precompilado. Puede o no calificar como 'fácil' en su libro.

El intérprete debe poder leerse a sí mismo, analizar su encabezado para determinar dónde termina el archivo .exe regular (es decir, dónde comienza el script) y luego transferir el resto del archivo a Lua.

Otras soluciones no requieren el intérprete de trabajar tan duro, pero no se requiere la vinculación más involucrados, mientras que con este método, exeifying un guión puede ser tan simple como

copy interpreter.exe+script.lua script.exe 
+5

Eso es lo que srlua hace. – lhf

7

Además de las sugerencias anteriores, puedes echar un vistazo a L-Bia.

Puede hacer ejecutables independientes, incluidos los scripts lua y las bibliotecas dinámicas necesarias.

+0

8^(Y tampoco funcionó L-Bia. – Zane

8

Para hacer ejecutable del uso de la escritura utilidad bin2c tal manera:

luac script.lua -o script.luac 
bin2c script.luac > code.c 

A continuación, cree en el editor de texto archivo main.c y compilar/enlazar con su compilador favorito. Eso es. (Nota - ejecutable también es compatible con la línea de comandos args)

Ejemplo con MSVC:

cl /I "./" /I "$(LUA_DIR)\include" /D "_CRT_SECURE_NO_DEPRECATE" /D "_MBCS" /GF /FD /EHsc /MD /Gy /TC /c main.c 
ld /SUBSYSTEM:CONSOLE /RELEASE /ENTRY:"mainCRTStartup" /MACHINE:X86 /MANIFEST $(LUA_DIR)\lib\lua5.1.lib main.obj /out:script.exe 
mt -manifest $script.manifest -outputresource:script.exe;1 

Uso/SUBSYSTEM: WINDOWS para ejecutable GUI. Todo eso no es fácil, solo por primera vez, puede crear un archivo por lotes para automatizar el proceso una vez que lo haya probado con éxito.

main.c:

#include <stdlib.h> 
#include <stdio.h> 
#include "lua.h" 
#include "lauxlib.h" 
#include "lualib.h" 

int main(int argc, char *argv[]) { 
    int i; 
    lua_State *L = luaL_newstate(); 
    luaL_openlibs(L); 
    lua_newtable(L); 
    for (i = 0; i < argc; i++) { 
    lua_pushnumber(L, i); 
    lua_pushstring(L, argv[i]); 
    lua_rawset(L, -3); 
    } 
    lua_setglobal(L, "arg"); 
#include "code.c" 
    lua_close(L); 
    return 0; 
} 
+2

Tenga en cuenta que bin2c se eliminó con Lua 5.1, por lo necesitas otra forma de empaquetar el bytecode y ponerlo en la pila Lua. Ver http://lua-users.org/wiki/BinToCee para una reimplementación en Lua. –

0

Como este tema tiene poco interés 'perpetua' y las posibles respuestas son 'fluido' en el sentido de que las nuevas soluciones pueden surgir (mientras que los mayores pueden llegar a ser obsoletos), aquí está otra posibilidad más (para Windows) y dependencias de fuente pura de Lua.

Enlace: Windows console utility to convert in a single step a Lua source with its Lua source dependencies into a C file ready for compilation.

Nota: Salvo cuando hay diferencias en el código de bytes para otras plataformas, el código C resultante debe ser capaz de compilar en cualquier plataforma que puede compilar de la fuente de Lua, y crear independiente binarios nativos de sus aplicaciones de Lua.

Cuestiones relacionadas