Compilação Estática do Interpretador Lua: Garantia de Consistência e Portabilidade

A linguagem Lua é minha favorita para desenvolver pequenos scripts e configurações. Ela é fácil de incluir em outros projetos e possui uma sintaxe limpa e simples. É fácil de estender e uma ótima linguagem para configurar sistemas.

Recentemente, iniciei um projeto que requer que o interpretador Lua esteja instalado. Isso normalmente não é um problema. Porém, para garantir total controle, decidi compilar minha própria versão do interpretador de forma estática. Isso assegura que diferenças na versão da libc ou em outras bibliotecas não interfiram no funcionamento do meu sistema. Já enfrentei muitos problemas com sistemas que não carregavam devido a versões diferentes da glibc. Além dos motivos práticos, acredito que todo software deve ser compilado estaticamente. O ganho de memória e a facilidade de atualização da compilação dinâmica não compensam os problemas que podem surgir.

Compilar o interpretador Lua é muito simples. Baixe o código-fonte, descompacte e acesse o diretório src. Em seguida, edite o arquivo Makefile e adicione o parâmetro -static na variável MYLDFLAGS. Por fim, execute o comando make para compilar o interpretador.

MYLDFLAGS=-static

Além do -static, é possível adicionar outros parâmetros interessantes, como -s para remover símbolos de debug, -Os para gerar um binário otimizado para tamanho, ou -Ofast para otimizar para velocidade, equivalente a -O3 com flags adicionais que podem não seguir todos os padrões de C, entre outros.

Bônus

Além de compilar sem incluir os símbolos de debug, podemos usar um “packer”. Um packer comprime o executável e o descomprime na memória durante a execução. Um bom packer é o UPX.

upx --best lua

Agora, além de estático, o executável também é bem pequeno.

Vídeo com o passo a passo:

Cesar Gimenes

Última modificação