ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Como gerar executável menor?

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
arctures
Aprendiz
Aprendiz


Registrado: Quinta-Feira, 16 de Junho de 2011
Mensagens: 112

MensagemEnviada: Sex Jul 15, 2011 10:54 pm    Assunto: Como gerar executável menor? Responder com Citação

Tem alguma forma de deixar o executável gerado pelo delphi menor. Queria saber se isso é possível? Lembrando que não quero compactar o exe.

Estava analizando aqui um arquivo exe gerado pelo MASM e tem 3Kb, pelo Delphi uns 400Kb, pior ainda pelo Lazarus 6Mb, queria tambem saber porque essa díferença gerada pelo compilador.

muito obrigado a que poder ajudar.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
johnny-walker
Moderador
Moderador


Registrado: Sábado, 4 de Outubro de 2003
Mensagens: 10599
Localização: Contagem/MG - BRAZIL

MensagemEnviada: Sáb Jul 16, 2011 12:36 am    Assunto: Responder com Citação

o masm32 utiliza em grande parte de api do windows e assembler de mais alto nível, em que assemelha-se a um linguagem como o c.
Além do mais é um codigo mais complicado de se escrever, apesar que o masm32 é bem melhor que assembler puro, pelo menos é mais compreensível. Mas sua complexidade é tanto quanto o próprio C que também é uma linguagem entre o baixo nível e o alto nível, sendo tao complexo quanto.

O delphi tb pode gerar executáveis menores, bastando para isto vc nao usar a vcl, neste caso todos os eventos devem ser feitos na mao, tal como no masm32, como os eventos de teclado, mouse, desenho da tela, botoes e etc.
Claro que isto toma tempo, mas se a pessoa quer um aplicativo que seja minúsculo, como um vírus por exemplo nao vai utilizar de qualquer modo componentes visuais e tentara de todo modo reduzir ao máximo a dependencia de terceiros, colocando as funçoes que acessa numa unit separada em vez de adicionar toda a unit.



bye
_________________
P.O.W.E.R B.Y D.E.L.P.H.I
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
oneshotbr
Colaborador
Colaborador


Registrado: Quarta-Feira, 6 de Mai de 2009
Mensagens: 1948
Localização: Taubaté - SP

MensagemEnviada: Sáb Jul 16, 2011 1:57 am    Assunto: Responder com Citação

Citação:
Tem alguma forma de deixar o executável gerado pelo delphi menor. Queria saber se isso é possível? Lembrando que não quero compactar o exe.

Estava analizando aqui um arquivo exe gerado pelo MASM e tem 3Kb, pelo Delphi uns 400Kb, pior ainda pelo Lazarus 6Mb, queria tambem saber porque essa díferença gerada pelo compilador.

muito obrigado a que poder ajudar.


Qual versão do Delphi você usa ? O Lazarus realmente tem esse problema mas existe uma opção que você desmarca e perde o debugger ele gera o executável menor.
_________________
AMD Phenom II X4 960T 3.00 GHz - 8 GB DDR III - HD 1000 GB SATA - GeForce GTX 650 TI GDDR 5 - Monitor 21,5" Full HD - Kubuntu 14.04 + Windows 7 Professional x64.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
arctures
Aprendiz
Aprendiz


Registrado: Quinta-Feira, 16 de Junho de 2011
Mensagens: 112

MensagemEnviada: Sáb Jul 16, 2011 11:15 am    Assunto: Responder com Citação

Tenho aqui o Delphi 7 e no Lazarus eu já conhecia essa opção, só que alem de tirar o debugger gera tambem uns 1,5Mb, fora esse problema do lazarus o resto é muito bom.

Oque eu queria era mais ou menos isso que nosso amigo falo ae usar só algumas partes da unit, porem por alguns testes que fiz aqui vai se meio difício colocar numa unit separada a maioria das funções estão todas ligada uma na outra, ou tambem linkar só as funções que iria usar, criar um lib separado, alguma coisa nesse tipo.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
johnny-walker
Moderador
Moderador


Registrado: Sábado, 4 de Outubro de 2003
Mensagens: 10599
Localização: Contagem/MG - BRAZIL

MensagemEnviada: Sáb Jul 16, 2011 3:14 pm    Assunto: Responder com Citação

Amigo se vc quiser eu te passo um scanner que utiliza esta técnica, altém de ser multi-thread, basta vc dar uma private message com seu email.


bye
_________________
P.O.W.E.R B.Y D.E.L.P.H.I
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
arctures
Aprendiz
Aprendiz


Registrado: Quinta-Feira, 16 de Junho de 2011
Mensagens: 112

MensagemEnviada: Sáb Jul 16, 2011 9:38 pm    Assunto: Responder com Citação

Quero Sim, meu email e o mesmo, manda la pra mim fazendo favor, valeu.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
arctures
Aprendiz
Aprendiz


Registrado: Quinta-Feira, 16 de Junho de 2011
Mensagens: 112

MensagemEnviada: Sáb Jul 16, 2011 9:46 pm    Assunto: Responder com Citação

Uma coisa que lembrei sobre o Masm32 e que ele linka das units só as funções que usa, no começo não tinha entendido muito a idéia, mas analizando um executável Masm e um Delphi num editor hex, notei que no Delphi tem toda unit no executável, se o Delphi linka-se so as funções igual o Masm seria ótimo tambem (mais ou menos isso). Valeu.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
johnny-walker
Moderador
Moderador


Registrado: Sábado, 4 de Outubro de 2003
Mensagens: 10599
Localização: Contagem/MG - BRAZIL

MensagemEnviada: Dom Jul 17, 2011 12:32 pm    Assunto: Responder com Citação

No delphi tb faz isto, note que até variaveis que nao fazem nada no seu codigo vc nem consegue marcar um break point, o compilador otimiza o codigo bem, mas depois em produçõa tem de desmarcar a opcao de debug que diminui ainda mais o executável, pois aih ele nao tem mais as informacoes de debug.

bye
_________________
P.O.W.E.R B.Y D.E.L.P.H.I
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
gilsonnrodrigues
Moderador
Moderador


Registrado: Quinta-Feira, 14 de Abril de 2005
Mensagens: 9009
Localização: Governador Valadares-MG

MensagemEnviada: Dom Jul 17, 2011 3:01 pm    Assunto: Responder com Citação

um exemplo de programa q compilando no d2007 ficou com 19k sem uso de compactadores


Código:
program Project1;

uses
  Windows, Messages;

var
  Terminado : Boolean = False;

function Proc(wnd,msg,wParam,lParam:longint):longint;stdcall;
begin
  result:=0;
  case msg of
   WM_CLOSE:
    begin
      if MessageBox(wnd,'Deseja sair?','Teste',
        MB_ICONEXCLAMATION or MB_YESNO)<>IDNO
      then begin
        DestroyWindow(wnd);
        Terminado := True;
        exit;
      end;
    end;
   WM_KEYDOWN:
    begin
      if wParam = VK_ESCAPE then MessageBox(wnd, 'Esc', 'dd', MB_OK);
    end;
   else result:=DefWindowProc(wnd,msg,wParam,lParam);
  end;
end;

function WinMain(hThisInst,hPrevInst:HINST; lpszArgs:pchar; nWinMode:integer):integer;
var
  wnd:HWND;
  msg:tMSG;
  wcl:TWndClassEx;
  cx,cy:integer;
begin
  cx:=GetSystemMetrics(SM_CXFULLSCREEN);
  cy:=GetSystemMetrics(SM_CYFULLSCREEN);
    fillchar(wcl,sizeof(wcl),0);
  wcl.hInstance:=hThisInst;
  wcl.lpszClassName:='TTeste';
  wcl.lpfnWndProc:=@proc;
  wcl.style:=CS_DBLCLKS or CS_HREDRAW or CS_VREDRAW;
  wcl.cbSize:=sizeof(TWndClassEx);
  wcl.hIcon:=LoadIcon(0,IDI_APPLICATION);
  wcl.hIconSm:=LoadIcon(0,IDI_WINLOGO);
  wcl.hCursor:=LoadCursor(0,IDC_ARROW);
  wcl.lpszMenuName:=nil;
  wcl.cbClsExtra:=0;
  wcl.cbWndExtra:=0;
  wcl.hbrBackground:=0;
  if RegisterClassEx(wcl)=0 then begin result:=0; exit; end;
  wnd:=CreateWindow('TTeste','testesss',WS_OVERLAPPEDWINDOW,
    (cx div 2)-320,(cy div 2)-230,640,480,0,0,hThisInst,nil);
  ShowWindow(wnd,nWinMode);
  UpdateWindow(wnd);
  while not Terminado and GetMessage(msg,0,0,0) do
  begin
    TranslateMessage(msg);
    DispatchMessage(msg);
  end;

  result:=msg.wParam;
end;

begin
  WinMain(hInstance,0,nil,1);
end.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
arctures
Aprendiz
Aprendiz


Registrado: Quinta-Feira, 16 de Junho de 2011
Mensagens: 112

MensagemEnviada: Seg Jul 18, 2011 12:11 pm    Assunto: Responder com Citação

Como faz agora pra colocar o botão no form

brincadeira, ta de boa Very Happy

muito obrigado aew, ajudou na minha dúvida.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
rodrigoprado
Colaborador
Colaborador


Registrado: Terça-Feira, 24 de Mai de 2005
Mensagens: 1062
Localização: Curitiba/PR

MensagemEnviada: Seg Jul 18, 2011 5:59 pm    Assunto: .. Responder com Citação

-Aqui na empresa um .exe comum teria 60,7 mb.
-otimizamos ele pra 30.0
-depois disto ainda compactamos ele no 7Zip usando compactação modo ultra, fazendo o mesmo cair para 4,5 mb.

então no final teriamos um arquivo.7z de 4,5 mb.

01-Usamos o delphi 7, em Project --- Options na page
DEBUGGING desmarcamos todos os checks
ex: degug information, local symbols, reference, definitions, assertions, use debug dcus.
02-na page LINKER no group EXE AND DLL OPTION desmarcamos o generate consolte, o include td32 debug e include remote debug simbols.

ai clicamos ok, vamos em shift+f para da um build no exe novo, ele vai cair pra menos da metade do pacote, pq nestas opões eh a versão do usuario ai nao precisamos incluir nada de debug que usamos pra desenvolvimento entre outras coisas.. .que soh existem pra gente que desenvolve, pro usuario elel nao precisa disto ou seja so recebe o codigo puro.


isto eh muito util espero ter ajudado.. t +
_________________
- Compartilhe seus conhecimentos -
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
rodrigoprado
Colaborador
Colaborador


Registrado: Terça-Feira, 24 de Mai de 2005
Mensagens: 1062
Localização: Curitiba/PR

MensagemEnviada: Seg Jul 18, 2011 6:00 pm    Assunto: Responder com Citação

*shift+f9 pra dar um build ehhe recriar o .exe com as dcus e tudo mais.
_________________
- Compartilhe seus conhecimentos -
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
mocao18
Novato
Novato


Registrado: Quarta-Feira, 26 de Janeiro de 2011
Mensagens: 3

MensagemEnviada: Ter Jul 19, 2011 11:02 am    Assunto: Responder com Citação

Achei interessante as configurações que passaram para deixar os executáveis do delphi menores, vou testar depois.

Não vi ninguém citando nesse tópico, mas existe um compactador de executáveis chamado UPX, já tive casos em que ele diminui o executável para apenas 20% do tamanho original, mas isso depende do tamanho. E o executável continua trabalhando da mesma maneira sem problema nenhum.

Fica a dica aí.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
rvercesi
Mestre
Mestre


Registrado: Segunda-Feira, 29 de Novembro de 2010
Mensagens: 912
Localização: Curitiba / PR

MensagemEnviada: Ter Jul 19, 2011 11:45 am    Assunto: Responder com Citação

Já tive alguns problemas com o UPX. Em alguns casos o executável para de rodar e em alguns outros ele dá erros estranhos e retorna informações estranhas.

Mas na maioria das vezes funciona bem!

Mas convém testar muito bem ele antes de mandar o executável compactado por ele para produção!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
flaviowmf
Aprendiz
Aprendiz


Registrado: Quarta-Feira, 8 de Dezembro de 2004
Mensagens: 128

MensagemEnviada: Ter Jul 19, 2011 12:06 pm    Assunto: Responder com Citação

Existe também o ASPack, nunca tive problemas com ele.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB