Jump to content

Delphi chamada_delphi.png acbr.png

C6 chamada_c6.png botao.png

Como configurar o Lazarus Linux para Cross Compile


  • Este tópico foi criado há 1004 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Fundadores

Cross Compile de Linux para Win32

  • Baixe o Lazarus do Site oficial:

https://www.lazarus-ide.org/

Exemplo de arquivos a serem baixados: 
lazarus-2.0.2-0.x86_64.rpm,
fpc-3.0.4-1.x86_64.rpm,
fpc-src-3.0.4-1.x86_64.rpm

  • Instalar FPC e FPCSRC (em modo "root")
rpm -U fpc*
  • Instalar Lazarus  (em modo "root")
rpm -U lazarus*
  • Testar a instalação do Lazarus (em modo normal)
startlazarus
  • Feche o Lazarus e acesse a pasta dos fontes do FPC
cd /usr/share/fpcsrc/3.0.4
  • Compilar FPC em Win32  (em modo "root")
make all OS_TARGET=win32 CPU_TARGET=i386
  • Instalar novas DCUs e Compilador no Linux  (em modo "root")
make crossinstall OS_TARGET=win32 CPU_TARGET=i386 INSTALL_PREFIX=/usr
  • Editar /etc/fpc.cfg (em modo "root")

Incluir antes da sessão "Linking" a linha
-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/*

  • Criar Link Simbólico para o compilador Win32 em /usr/bin (em modo "root")
ln -s /usr/lib/fpc/3.0.4/ppcross386 /usr/bin/ppcross386
  • Configure o seu projeto, criando um novo Build Mode (em modo normal)

 Acesse Project Options -> Compiler Options -> Config and Target
 Target OS -> Win32
 Target CPU -> i386
 

  • Se ocorrer erros na recompilação da IDE, e tiver dificuldades de descobrir o problema.

  Selecione em Mensagens, para não efetuar nenhum filtro
  Botão direito em Mensagems -> Filter non Urgent Messages -> Filter None

Observe as mensagens, geralmente é acusada a falta de alguma Biblioteca compartilhada...

 

No caso de dúvidas, por favor crie um novo tópico em:

https://www.projetoacbr.com.br/forum/forum/12-object-pascal-delphi-lazarus/

  • Like 10
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link to comment
Share on other sites

  • 2 months later...
  • Fundadores

Cross Compile de Linux para Win64

  • Acessar pasta dos fontes do FPC
cd /usr/share/fpcsrc/3.0.4
  • Compilar FPC em Win64  (em modo "root")
make all OS_TARGET=win64 CPU_TARGET=x86_64
  • Instalar novas DCUs e Compilador no Linux  (em modo "root")
make crossinstall OS_TARGET=win64 CPU_TARGET=x86_64 INSTALL_PREFIX=/usr
  • Editar /etc/fpc.cfg (em modo "root")

Incluir antes da sessão "Linking" a linha
-Fu/usr/lib64/fpc/$fpcversion/units/$fpctarget/*

  • Criar Link Simbólico para o compilador Win64 em /usr/bin (em modo "root")
ln -s /usr/lib/fpc/3.0.4/ppcrossx64 /usr/bin/ppcrossx64
  • Configure o seu projeto, criando um novo Build Mode (em modo normal)

 Acesse Project Options -> Compiler Options -> Config and Target
 Target OS -> Win64
 Target CPU -> x86_64

  • Like 4
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link to comment
Share on other sites

  • Daniel Simoes changed the title to Como configurar o Lazarus Linux para Cross Compile em Win32/i386 e Win64/x86_64
  • 4 weeks later...
  • Fundadores

Cross Compile de Linux64 para Linux32

(Fonte: https://wiki.freepascal.org/Cross_compiling#From_Linux_x64_to_Linux_i386  )

Você precisará do Linker em 32 Bits... ou mais precisamente do arquivo i386-linux-ld

  • No meu OpenSuse, esse binário pode ser instalado pelo pacote cross-i386-binutils, portanto... (em modo root)
zypper install cross-i386-binutils
zypper install cross-i386-gcc9
  • Porém o OpenSuse irá instalar esse binário com um nome ligeiramente diferente, então basta fazermos um link simbólico para o nome esperado pelo FPC (em modo root)
ln -s /usr/bin/i586-suse-linux-ld /usr/bin/i386-linux-ld
ln -s /usr/bin/i586-suse-linux-as /usr/bin/i386-linux-as
  • Acessar pasta dos fontes do FPC
cd /usr/share/fpcsrc/3.0.4
  • Compilar FPC em Linux 32 (em modo "root")
make all OS_TARGET=linux CPU_TARGET=i386
  • Instalar novas DCUs e Compilador no Linux  (em modo "root")
make crossinstall OS_TARGET=linux CPU_TARGET=i386 INSTALL_PREFIX=/usr
  • Você precisará ter todas as Libs que o seu software depende, instaladas no seu sistema Linux, na versão 32 bits... Exemplo:
/usr/bin/ld: não foi possível localizar -lpthread
/usr/bin/ld: não foi possível localizar -lgdk-x11-2.0
....

Isso significa que precisamos ter no sistema as libs (libpthread.so e libgdk-x11-2.0.so) em algum diretório do LibPath para Libs de 32 bits (/lib ou /usr/lib)

  • Resolva passo a passo as dependências,

Provavelmente seja mais fácil usar o utilitário yast,  para procurar as Libs faltantes, na versão 32 bits..
Instalando os pacotes abaixo, provavelmente você resolverá várias das dependências...

zypper install glibc-32bit
zypper install glibc-devel-32bit
zypper install libgthread-2_0-0-32bit
zypper install libgtk-2_0-0-32bit
zypper install libgdk_pixbuf-2_0-0-32bit 
zypper install libpango-1_0-0-32bit
zypper install libX11-6-32bit
zypper install libxml2-2-32bit

 

  • Se necessário, crie links simbólicos para os nomes corretos (terminando em .SO)... Exemplo:
cd /lib
ln -s libpthread.so.0 libpthread.so
ln -s libc.so.6 libc.so
ln -s libdl.so.2 libdl.so

cd /usr/lib
ln -s libglib-2.0.so.0 libglib-2.0.so
ln -s libgmodule-2.0.so.0 libgmodule-2.0.so
ln -s libgthread-2.0.so.0 libgthread-2.0.so
ln -s libgobject-2.0.so.0 libgobject-2.0.so
ln -s libgtk-x11-2.0.so.0 libgtk-x11-2.0.so
ln -s libgdk-x11-2.0.so.0 libgdk-x11-2.0.so
ln -s libgdk_pixbuf-2.0.so.0 libgdk_pixbuf-2.0.so
ln -s libatk-1.0.so.0 libatk-1.0.so
ln -s libcairo.so.2 libcairo.so
ln -s libpango-1.0.so.0 libpango-1.0.so
ln -s libpangocairo-1.0.so.0 libpangocairo-1.0.so
ln -s libX11.so.6 libX11.so
ln -s libxml2.so.2 libxml2.so

Compile novamente e verifique se ainda restam dependências de Libs, no caso de novo erro... cheque novamente se as libs indicadas nas mensagens de erro, estão em /lib ou /usr/lib (ou com o nome semelhante ao esperado)

  • Editar /etc/fpc.cfg, para configurar corretamente o Path da gcclib em 32 e 64 bits (em modo "root")
# path to the gcclib
#ifdef cpui386
-Fl/usr/lib64/gcc/i586-suse-linux/9
#endif
#ifdef cpux86_64
-Fl/usr/lib64/gcc/x86_64-suse-linux/9
#endif
  • Configure o seu projeto, criando um novo Build Mode (em modo normal)

 Acesse Project Options -> Compiler Options -> Config and Target
 Target OS -> linux
 Target CPU -> i386

  • Like 3
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link to comment
Share on other sites

  • Daniel Simoes changed the title to Como configurar o Lazarus Linux para Cross Compile
  • Fundadores

Cadê o compilador de Resources, "windres" ?

Se você compila Resources diretamente dos Fontes, o Compilador FPC irá procurar pelo compilador de Resource...

Exemplo:

{$R AResourceFile.rc}  

Irá compilar um arquivo .RC e gerar o arquivo .RES, que será anexado ao Binário na compilação final...

Exemplo de Sintaxe de um arquivo de Resources

UmaImagem RCDATA "ImagemExemplo.jpg"
ArquivoDLL RCDATA "Dependencia.dll"

pra compilar um arquivo de Resource em Windows, o compilador FPC irá procurar pelo utilitário windres, que é provido pela Binutils

Pode ser que a sua distribuição já tenha instalado o windres, quando você instalou o pacote binutils ou cross-i386-binutils.

O FPC irá procurar por windres quando estiver compilando em Win64 e   i386-win32-windres, quando estiver compilando em Win32

Eu não achei nenhum artigo que informe diferenças na compilação de Resources do Windows de 32 para 64 bits... portanto, se você já tem o windres instalado, mas ainda não tem o i386-win32-windres, acho que é seguro apenas criar o link simbólico..
Digite os comandos abaixo (como root)

cd /usr/bin
ln -s windres i386-win32-windres

 

No caso do Opensuse, ele não instalou o windres, quando a binutils foi instalada... nesse caso, a maneira mais simples que encontrei, foi baixar os fontes da Binutils e compilar o windres

Você pode baixar a última versão dos fontes da Binutils em: http://ftp.gnu.org/gnu/binutils/

  • Descompacte o arquivo baixado, em uma pasta temporária
tar xvf binutils-2.32.tar.bz2
  • Compile a Binutils e o Windres
cd binutils-2.32
./configure
make
cd binutils
make windres

Ao final desse processo, você deverá ter o windres compilado, na pasta binutils-2.32/binutils

  • Copie o binário do windres, para /usr/bin (como root)
cp windres /usr/bin/
  • Para compilação em Win32, crie o link simbólico, como descrito no inicio: (como root)
cd /usr/bin
ln -s windres i386-win32-windres

 

  • Like 5
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link to comment
Share on other sites

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.