2010/7/6 Luciano de Souza <luch...@gmail.com>:
(...)
> momento da compilação. Mas o que pergunto é. Se o arquivo sample.wlua,
> utilizava funções de IUP, Luaxml, luasql, etc, quando bin2c converteu
> o seu respectivo binário, todas estas definições foram levadas
> juntamente?
Não. O programa bin2c apenas converte qualquer arquivo que você
passar para ele (bytecode Lua, MP3, AVI) para código C. O mesmo
processo deve ser repetido para todos os módulos Lua usados no
projeto.
--
-alex
http://www.artisancoder.com/
A combinação luac+bin2c apenas gera um arquivo que usamos na prática como
um código C gerado automaticamente que substitui a chamada a dofile em algum
ponto do seu programa em C já existente.
Usamos muito essa combinação internamente no IUP. Chamamos esses arquivos
gerados de LOH, e eles são literalmente incluidos nas funções de
inicialização do IupLua e seus módulos secundários usando #include.
[]s
scuri
> --
> Lua BR - http://groups.google.com/group/lua-br
Se voce tiver dificuldades de achar isso no código fonte do IUP me avise
que eu te mando diretamente. Fica na pasta iup/srcconsole.
[]s
scuri
> -----Original Message-----
> From: lua...@googlegroups.com [mailto:lua...@googlegroups.com] On
Deixe-me ver se eu entendi. Você quer um executável pequeno e, ao
mesmo tempo, quer link estático para não usar DLLs? Estes dois
objetivos são opostos - somem as DLLs e o executável infla.
Qual o problema em usar DLL?
--Stephen
Sent from my Emacs
Mas voc� tem raz�o. Embora 4,5MB seja menos que 13MB, o c�digo seria
inclu�do toda vez que um programa fosse compilado. Ent�o, ao inv�s de
economizar espa�o, estaria aumentando. Bom, mas a id�ia n�o � a economia de
espa�o; � a facilidade de instala��o (execut�vel �nico). Ao fim, talvez seja
esta tradicional preocupa��o com o modo de instala��o dos programas que
tenha feito com que desenvolvedores busquem sempre incluir tudo em seus
programas, consumindo mais recursos das m�quinas. Com os discos e as
mem�rias de hoje, � pouco relevante que um programa ocupe mais espa�o; mas
se todos os desenvolvedores est�o a fazer o mesmo, o sistema rodar� mais
lentamente.
Se n�o ligasse IUP estaticamente, se fizesse dois programas, ficaria
incomodado de gravar duas vezes os 13MB, por isso, teria que:
1. Ter dois instaladores: um para a interface gr�fica e outro para o
programa.
2. Incluir todas as DLLs de IUP no instalador. Durante o processo de
instala��o teria de varrer o computador do usu�rio para ver se l� j� n�o se
encontram. Ao fim, poderia mandar um execut�vel de 14MB e instalar
efetivamente apenas 1.
Com a liga��o est�tica, para IUP, penso que tal n�o ocorra.
----- Original Message -----
From: "Stephen Eilert" <sped...@gmail.com>
To: <lua...@googlegroups.com>
Sent: Wednesday, July 07, 2010 12:31 AM
Subject: Re: [lua-br] Re: Obtendo execut�veis de programas escritos em Lua
2010/7/6 Luciano de Souza <luch...@gmail.com>:
> O que me incomoda � que, por vezes, estou a fazer um programa
> pequenino que, mesmo com interface gr�fica, ocupasse n�o mais que 500
> KB incluindo todo o c�digo necess�rio � sua execu��o, sem depend�ncias
> al�m do pr�prio sistema operacional. E porque teria de enviar todas as
> DLLs os instaladores teriam de ficar sempre extraordinariamente
> grandes e, ainda verificar se tais DLLs j� foram gravadas no
> computador do usu�rio. Afinal, como h� depend�ncias em DLLs tenho
> sempre de garantir que todas estejam presentes e, se mais de um
> programa for instalado, � melhor que verifique para que n�o estejam em
> duplicidade.
> De fato, n�o � imprescind�vel que tudo seja reunido em um �nico
> execut�vel. mas que gostaria, l� isso gostaria! Isto � poss�vel e
> razoavelmente pr�tico?
Deixe-me ver se eu entendi. Voc� quer um execut�vel pequeno e, ao
mesmo tempo, quer link est�tico para n�o usar DLLs? Estes dois
objetivos s�o opostos - somem as DLLs e o execut�vel infla.
Qual o problema em usar DLL?
--Stephen
Sent from my Emacs
--
A praticidade � extraordin�ria e a ferramenta parece realmente �ltil. Mal se
cr� que esteja na vers�o 0.2!
Peguei um m�dulo cuja �nica dpened�ncia fosse Lua51.dll. Fiz:
l-bia test.lua
Um execut�vel pequenino foi gerado. Muito bom. Se corretamente entendi,
poderia incluir neste execut�vel inclusive o conte�do de DLL, quase como se
fosse liga��o est�tica. Ent�o, fiz um teste com um arquivo de exemplo de
IUP: submenu.lua. Inicialmente, tentei:
l-bia sumenu.wlua
Como neste arquivo, havia a declara��o "require('iuplua')", informou-me que
este m�dulo n�o existia e, portanto, n�o era poss�vel inclu�-lo. Pudera,
iuplua n�o � um m�dulo, mas uma DLL. A solu��o parecia estar no par�metro
"-l":
l-bia sumenu.wlua -l iuplua.dll
Ent�o, ele reclamou que a DLL n�o existia. Claro! "iuplua" n�o � o nome da
DLL, mas sim o nome exportado para a tabela _G, quando na DLL iuplua51.dll
invocou-se a fun��o lua_openiuplua. Penso que seja isso, ent�o:
l-bia submenu.wlua -l iuplua51.dll
Bom, meu amigo, isso tamb�m n�o funcionou. Continua a dizer-me que a DLL n�o
existe. Mas desta vez, para que n�o houvesse qualquer problema de n�o
encontrar, executei tudo dentro da pasta lua\5.1\clibs, onde est� a referida
DLL. Por isso, pergunto-lhe: nos execut�veis gerados por L-bia, j� conseguiu
incluir DLLs?
----- Original Message -----
From: "Igor" <igor.ferr...@gmail.com>
To: "Lua BR" <lua...@googlegroups.com>
Sent: Tuesday, July 06, 2010 5:17 PM
Subject: [lua-br] Re: Obtendo execut�veis de programas escritos em Lua
Resposta r�pida, sim. � poss�vel criar execut�veis Windows para Lua.
� s� usar o L-Bia. P�gina do projeto: http://l-bia.luaforge.net/
Igor Ferreira Cemim
--
NO entanto, l-bia tem dentro de si lua.exe e n�o wlua.exe. Como resultado,
n�o � poss�vel esconder o console o que, neste caso, � incoveniente.
quando observei o par�metro "-l" imaginei que se referisse a uma dll, mas
consegui compilar com a linha de comando: "l-bia submenu.wlua". Mas agora
come�o a imaginar que "-l" se refira a uma biblioteca C. Ent�o, ser� um
".h"?
O execut�vel resultante, incluiu todo o c�digo de todos os m�dulos, mas n�o
o das DLLs. � um execut�vel pequenino que continua a depender da presen�a
das DLLs. � tamb�m poss�vel p�-las para dentro do execut�vel?
O que consegui funciona bem para programas console e certamente o utilizarei
para este prop�sito. Mas o que obtive n�o � muito bom para GUI. Embora tenha
de deparar-me com os tem�veis compiladores C, para as GUIs, n�o poderei
fugir quando o objetivo for este.
----- Original Message -----
From: "Igor" <igor.ferr...@gmail.com>
To: "Lua BR" <lua...@googlegroups.com>
Sent: Wednesday, July 07, 2010 11:01 PM
Subject: [lua-br] Re: Obtendo execut�veis de programas escritos em Lua
Se com DLLs voc� se refere a extens�o sim.
Eu compilei um execut�vel que utilizava a extens�o LuaPacket com
sucesso.
Recomendo que voc� coloque o L-Bia, c�digo e arquivos da extens�o
(estrutura de diret�rios)
tudo no mesmo diret�rio antes de tentar compilar.
Para mim funcionou Ok. O L-Bia � muito �ltil. Estou conseguindo
Igor Ferreira Cemim
--
Alguém aí pode explicar como isso ocorre? Porque eu não faço a mínima
idéia. Para mim, ligação estática apenas copia o código da biblioteca
para o executável - então pouco importa se o código está no executável
ou na dll, ele vai estar em algum canto e o tamanho é o mesmo. Slack
space, talvez?
>
> Mas você tem razão. Embora 4,5MB seja menos que 13MB, o código seria
> incluído toda vez que um programa fosse compilado. Então, ao invés de
> economizar espaço, estaria aumentando. Bom, mas a idéia não é a economia de
> espaço; é a facilidade de instalação (executável único). Ao fim, talvez seja
> esta tradicional preocupação com o modo de instalação dos programas que
> tenha feito com que desenvolvedores busquem sempre incluir tudo em seus
> programas, consumindo mais recursos das máquinas.
Bem, ao meu ver facilidade de instalação é o caso apenas se *não
houver* um programa de instalação. Aí você teria apenas um executável.
Mas como normalmente programas Win32 vêm com um instalador, não faz
tanta diferença se é um arquivo só ou 1000 arquivos.
> Com os discos e as
> memórias de hoje, é pouco relevante que um programa ocupe mais espaço; mas
> se todos os desenvolvedores estão a fazer o mesmo, o sistema rodará mais
> lentamente.
Hein? Contanto que o disco não esteja praticamente lotado, o espaço em
disco ocupado é irrelevante para o desempenho. O espaço em memória
sim, mas hoje em dia isso também não é muito relevante: o espaço
ocupado por código é muito menor do que o ocupado pelos dados. E não
dá pra prever o "memory footprint" com base no "disk footprint".
>
> Se não ligasse IUP estaticamente, se fizesse dois programas, ficaria
> incomodado de gravar duas vezes os 13MB, por isso, teria que:
>
> 1. Ter dois instaladores: um para a interface gráfica e outro para o
> programa.
>
> 2. Incluir todas as DLLs de IUP no instalador. Durante o processo de
> instalação teria de varrer o computador do usuário para ver se lá já não se
> encontram. Ao fim, poderia mandar um executável de 14MB e instalar
> efetivamente apenas 1.
Depende. Hoje em dia, a Microsoft recomanda o que ela chama de "xcopy
deployment". Isso quer dizer que, para instalar uma aplicação, o
usuário efetivamente precisa fazer apenas uma cópia. Para viabilizar
isso, as DLLs vão no diretório do programa, não em System(32). Nesse
caso não é necessário verificar coisa alguma: copie as DLLs para o
diretório de destino e pronto. Caso seja estritamente necessária a
instalação de DLLs em System(32), aí sim vc teria que "varrer" o
computador - mas isso é trabalho para o instalador fazer, não é seu
trabalho. Use um instalador decente ao invés de escrever o seu.
Existe outro ponto: com DLLs, seus dois programas compartilham o mesmo
código em memória, se eles usarem as mesmas DLLs. Cada DLL é carregada
apenas uma vez em memória. E você ainda tem a flexibilidade de fazer
coisas como, por exemplo, carregar a DLL apenas quando o programa
precisar e não na inicialização.
Distribuição de patches também é mais fácil: se só uma DLL precisar de
correção, você pode distribuir só ela.
Não vejo muitos motivos para usar ligação estática hoje em dia. A não
ser que você queira esconder o fato de estar usando Lua, dos olhos de
pessoas leigas.
Quando ao problema de não usar o wlua.exe, acho que pode ser contornado
copiando o arquivo wlua.exe que vem no Lua for Windows para lua.exe na pasta
onde o l-bia vai acessa-lo.
O problema de renomear a DLL do IupLua é que os módulos secundários do
IupLua, tal como "iupluacontrols" não vão funcionar. Aproveite para copiar a
DLL de Lua do Lua for Windows para o l-bia, esse pode ser o problema de ele
não estar encontrando o IupLua.
[]s
scuri
> -----Original Message-----
> From: lua...@googlegroups.com [mailto:lua...@googlegroups.com] On
> Behalf Of Luciano de Souza
> Sent: quinta-feira, 8 de julho de 2010 00:39
> To: lua...@googlegroups.com
> Subject: Re: [lua-br] Re: Obtendo executáveis de programas escritos em
> Lua
>
> Encontrei o problema. No require, declarei "iuplua', mas a DLL chama-se
> 'iuplua51.dll'. Bastou que renomeasse a DLL para iuplua.dll que a
> compilação
> funcionou.
>
> NO entanto, l-bia tem dentro de si lua.exe e não wlua.exe. Como
> resultado,
> não é possível esconder o console o que, neste caso, é incoveniente.
>
> quando observei o parâmetro "-l" imaginei que se referisse a uma dll,
> mas
> consegui compilar com a linha de comando: "l-bia submenu.wlua". Mas
> agora
> começo a imaginar que "-l" se refira a uma biblioteca C. Então, será um
> ".h"?
>
> O executável resultante, incluiu todo o código de todos os módulos, mas
> não
> o das DLLs. É um executável pequenino que continua a depender da
> presença
> das DLLs. É também possível pô-las para dentro do executável?
>
> O que consegui funciona bem para programas console e certamente o
> utilizarei
> para este propósito. Mas o que obtive não é muito bom para GUI. Embora
> tenha
> de deparar-me com os temíveis compiladores C, para as GUIs, não poderei
> fugir quando o objetivo for este.
>
>
>
> ----- Original Message -----
> From: "Igor" <igor.ferr...@gmail.com>
> To: "Lua BR" <lua...@googlegroups.com>
> Sent: Wednesday, July 07, 2010 11:01 PM
> Subject: [lua-br] Re: Obtendo executáveis de programas escritos em Lua
>
>
> Se com DLLs você se refere a extensão sim.
> Eu compilei um executável que utilizava a extensão LuaPacket com
> sucesso.
> Recomendo que você coloque o L-Bia, código e arquivos da extensão
> (estrutura de diretórios)
> tudo no mesmo diretório antes de tentar compilar.
>
> Para mim funcionou Ok. O L-Bia é muito últil. Estou conseguindo
Isso não é verdade. O tamanho mínimo de uma aplicação Lua que use IUP é:
wlua5.1.exe -> 35Kb
lua5.1.dll - > 164Kb
iup.dll - > 365Kb
iuplua51.dll - > 116Kb
Total: 680Kb
Contando com Lua junto. Ou seja bem abaixo dos tais 13Mb. E não estamos
falando de uma aplicação reduzida, apenas de uma versão do IUP sem desenho
gráfico, nem suporte a arquivos de imagem, nem controles estendidos tipo
IupMatrix, mas que inclui todos os controles principais de uma interface com
o usuário tradicional.
Imagino que na sua conta voce tenha incluido tudo relacionado com IUP,
assimo como CD e IM.
[]s
Scuri
[]s
scuri
> -----Original Message-----
> From: lua...@googlegroups.com [mailto:lua...@googlegroups.com] On
> Behalf Of Luciano de Souza
> Sent: quinta-feira, 8 de julho de 2010 14:39
> To: Lua BR
> Subject: [lua-br] Re: Obtendo executáveis de programas escritos em Lua
>
As DLLs da API do Windows não entram nessa contabilidade, a não ser
que elas sejam parte de algum "redistributable" - msvcrt, directx,
msxml ou coisas do tipo.
Hoje em dia as pessoas não têm o menor pudor em distribuir aplicações
em Java (que precisam da JRE inteira e é bem maior do que 13MB) mais
diversos .jars de dependências ou em .NET (que precisa do .net
framework inteiro também).
Em contraste, minha última aplicação em Python com wxWidgets
(wxPython) tinha aproximadamente 4MB. E a distribuição Python é muito,
mas muito maior do que Lua. Só a DLL do interpretador era coisa de
1,5MB.
Lua tem um dos menores runtimes que eu conheço. Portanto, o meu
conselho final é: tente gastar um tempo para descobrir quais são, de
fato, as dependências. Tenho certeza que você vai ter uma boa
surpresa.
-- Stephen
Sent from my Emacs