segunda-feira, 30 de novembro de 2009

Reduzir Tamanho de Executaveis

Usando o aplicativo upx, por exemplo:
x:\caminhoparaupx\upx.exe nomedoarquivo.exe

Voce pode baixar o aplicativo em:
http://upx.sourceforge.net/

quarta-feira, 11 de novembro de 2009

gerando executáveis Win32 estando no Linux

Cross-compile Lazarus, gerando executáveis Win32 estando no Linux

Filed under: Lazarus

Lazarus logo

Fazendo download

Primeiramente você deve ter o Lazarus devidamente instalado, no site Vivaolinux você encontrar diversos artigos focando a instalação do Lazaus.

Eu como bom Slackuser já fui nos fontes, na edição deste artigo estamos na versão recém lançada do Lazarus 0.9.22 e FPC 2.0.4.

No link você encontra os requisitos mínimos para funcionamento: FPC, FPC SRC e Lazarus

Depois do Lazarus devidamente instalado, configurado e funcionando no seu Linux passamos a nos preocupar com o cross-compile.

Faça download do FPC-CrossCompile no mesmo link.

Instalação e configuração

O processo é bem simples, se fez download e instalação dos RPM, é só fazer o mesmo com o FPC-CrossCompile.

Mas se como eu preferiu descompactar os RPMs e instalar manualmente os software devem estar em:

  • Lazarus /usr/local/lazarus
  • FPC /usr/local/lib/fpc
  • FPC SRC /usr/local/src/fpc

Descompactando o RPM do FPC-CrossCompile será criado um diretório chamado usr no diretório local, agora vamos copiar algumas coisas:

# cp -a ./usr/lib/fpc/2.0.4/units/i386_win32 /usr/local/lib/fpc/2.0.4/units

# cp ./usr/bin/* /usr/local/bin

Preste muita atenção, estamos copiando do {DIR ATUAL}/usr que surgiu ao descompactar o RPM do FPC-CrossCompile.

Precisamos agora editar o arquivo /etc/fpc.cfg, ele contém informaçõs usadas pelo Lazarus para encontrar as units entre outras coisas.

Parte do /etc/fpc.cfg (atual)

# searchpath for units and other system dependent things

-Fu/usr/local/lib/fpc/$fpcversion/units/$fpctarget

-Fu/usr/local/lib/fpc/$fpcversion/units/$fpctarget/*

-Fu/usr/local/lib/fpc/$fpcversion/units/$fpctarget/rtl

#-Fu~/fpc/packages/base/*/units/;~/fpc/fcl/units/;~/fpc/rtl/units/

Vamos edita-lo para que fique da seguinte forma:

# searchpath for units and other system dependent things

#IFDEF win32

-Fu/usr/local/lib/fpc/$fpcversion/units/$fpctarget

-Fu/usr/local/lib/fpc/$fpcversion/units/$fpctarget/*

-Fu/usr/local/lib/fpc/$fpcversion/units/$fpctarget/rtl

-XPfpc-i386-win32-

-FD/usr/local/bin

#ELSE linux

-Fu/usr/local/lib/fpc/$fpcversion/units/$fpctarget

-Fu/usr/local/lib/fpc/$fpcversion/units/$fpctarget/*

-Fu/usr/local/lib/fpc/$fpcversion/units/$fpctarget/rtl

#-Fu~/fpc/packages/base/*/units/;~/fpc/fcl/units/;~/fpc/rtl/units/

#ENDIF

FPC configurado, agora falta dar uma atenção ao Lazarus, precisamos recompilar as units para que tenhamos suporte a win32.

Digite:

# cd /usr/local/lazarus/lcl

# make clean

# make all OS_TARGET=win32

# cd /usr/local/lazarus/

# make clean

# make all OS_TARGET=win32

Lembre-se de ajustar os paths, se instalou pelos RPMs substitua /usr/local por /usr.

CrossCompile finalmente

No Lazarus para configurar entre compilar Win32 ou Linux é muito facil e rápido, basta acessar o menu Project >> Compiler Options

Na aba Path em LCL Widget Type selecionar win32
LCL Widget Type

Na aba Code em OS Target selecionar Win32.

OS Target

Pronto, agora basta compilar, será gerado um .EXE que pode ser executado sem problemas no Windows, se for inteligente já deve ter um QEMU ou vmplayer rodando para nunca mais ter que usar Dual-Boot.

vmplayer

Conclusão

“Seu problemas acabaram” Sr. Cleison
Neste artigo foi abordado Cross-compile Windows sobre o Linux mas também pode ser feito MacOS, Darwin, Solares, etc sobre Linux, batando somente obter os pacotes, link-editores necessários para outras plataformas.

Quem usa Lazarus for Windows já sabe que a compilação é muito lenta, isso se deve ao linkador inteligente for Windows e se você desativar, o executável fica maior do que já é, problema que é resolvido com o Cross-compile.

Autor Francis David Donato Pereira

http://blog.fdavid.com.br