instalar ejecutable crear compilation nginx lua luajit

compilation - crear - ¿Cómo compilar scripts de Lua en un solo ejecutable, mientras se gana el rápido compilador de LuaJIT?



py2exe python 3 (2)

Para una aplicación web que está implementando actualmente como un nido de archivos .lua relacionados, su respuesta más fácil será condensarlos en un único archivo. Esto a menudo se puede hacer para casos simples con luac . Sin embargo, para aplicaciones complejas con una combinación de módulos, quieres algo más inteligente.

Yo personalmente uso squish utilidad de Mathew Wild para hacer algo similar.

Después de ejecutar squish, tendrá un único archivo .lua que contiene todo el código fuente de Lua incluido convenientemente. Podrías simplemente implementar ese único archivo.

Si también necesita agrupar cualquier módulo binario, o el intérprete Lua o LuaJIT, puede usar SRLua fácilmente para agruparlo con el intérprete Lua, o técnicas similares para agruparlo con LuaJIT.

¿Cómo puedo compilar mis scripts de Lua en un único archivo ejecutable, y al mismo tiempo obtener los beneficios de rendimiento súper rápidos de LuaJIT ?

Fondo:

  • Mis scripts Lua son para una aplicación web que he creado (por ejemplo, para alojar http://example.com )
  • Mi pila de tecnología actual es NGINX (servidor web), Lua / LuaJIT (lenguaje para recuperar contenido dinámico)
  • Tengo más de .lua archivos .lua que componen mi aplicación web (desde Modelos / Vistas / Controladores)
  • Sistema operativo FreeBSD 9

Para simplificar la implementación, me gustaría compilar todos mis scripts .lua que ejecuten mi aplicación web en un solo ejecutable.

  1. ¿Es esto posible y cómo?

    Parece que el oficial de Lua viene con una biblioteca llamada SRLua

  2. ¿Cuáles son los aspectos negativos para compilar mi .lua en un único ejecutable (por ejemplo, el rendimiento sería peor, etc.)?

Traduzca todos los archivos de código fuente de Lua a archivos de objetos y póngalos en una biblioteca estática:

for f in *.lua; do luajit -b $f `basename $f .lua`.o done ar rcus libmyluafiles.a *.o

A continuación, vincule la biblioteca libmyluafiles.a en su programa principal utilizando -Wl,--whole-archive -lmyluafiles -Wl,--no-whole-archive -Wl,-E .

Esta línea obliga al vinculador a incluir todos los archivos de objeto del archivo y a exportar todos los símbolos.

Por ejemplo, un archivo llamado foo.lua ahora se puede cargar con local foo = require("foo") desde su aplicación.

Los detalles sobre la opción -b se pueden encontrar en Running LuaJIT .