Skip to content

Instantly share code, notes, and snippets.

@fluisgirardi
Last active June 20, 2020 18:39
Show Gist options
  • Save fluisgirardi/049014a008d5e5284a2a0a822f9af115 to your computer and use it in GitHub Desktop.
Save fluisgirardi/049014a008d5e5284a2a0a822f9af115 to your computer and use it in GitHub Desktop.
Setup de ambiente para crosscompile de Windows para Linux

Abaixo está um passo a passo para configurar o FPC/Lazarus pra compilar pra Linux i386 (32 bits) ou amd64 (64 bits). Estou presumindo que você tenha o Lazarus 1.8.4/FPC 3.0.4 instalado no PATH c:\Lazarus

Antes de começar, fique atento para dois detalhes: arquitetura do Lazarus e a arquitetura alvo de onde vc deseja rodar sua aplicação Linux, ou seja se o seu lazarus e SO Linux destino são i386 (32 bits) ou amd64 (64 bits).

Passo a passo:

  1. Este passo é sensivel ao seu target (Linux32 ou Linux64) e sua arquitetura do Lazarus/FreePascal (Win32 ou Win64)

Se você deseja compilar para Linux i386 (32 bits) e tem instalado o Lazarus i386 (32bits) baixe o arquivo: https://www.pilotlogic.com/sitejoom/index.php/downloads/send/6-windows32/12-win32-i386-linux-7z

Se você deseja compilar para Linux amd64 (64 bits) e tem instalado o Lazarus i386 (32bits) baixe o arquivo: https://www.pilotlogic.com/sitejoom/index.php/downloads/send/6-windows32/21-win32-x86-64-linux-7z

Se você deseja compilar para Linux i386 (32 bits) e tem instalado o Lazarus AMD64 (64bits) baixe o arquivo: https://www.pilotlogic.com/sitejoom/index.php/downloads/send/7-windows64/28-win64-i386-linux-7z

Se você deseja compilar para Linux amd64 (64 bits) e tem instalado o Lazarus AMD64 (64bits) baixe o arquivo: https://www.pilotlogic.com/sitejoom/index.php/downloads/send/7-windows64/35-win64-x86-64-linux-7z

  1. Este passo é sensivel a sua arquitetura do Lazarus/FreePascal (Win32 ou Win64). Descompacte o arquivo baixado no passo 1 na pasta: Lazarus 32 bits: c:\lazarus\fpc\3.0.4\bin\i386-win32 Lazarus 64 bits: c:\lazarus\fpc\3.0.4\bin\x86_64-win64

ATENÇÃO: o arquivo baixado no passo 1 contem executáveis e o diretório/pasta cidada acima também contem executáveis. Portanto tenha cuidado na hora de extrair os arquivos para que os executáveis extraidos fique na mesma pasta dos existentes, e não em uma subpastas.

  1. Baixe os fontes do FPC, da mesma versão do compilador que está instalado com o Lazarus: https://ufpr.dl.sourceforge.net/project/freepascal/Source/3.0.4/fpc-3.0.4.source.zip
  2. Extraia eles para, por exemplo, C:\fpc304sources MEMORIZE O PATH ONDE VC OS EXTRAIU
  3. Entre na pasta onde vc extraiu os arquivos e verifique se dentro dela (c:\fpc304sources sugestão do passo anterior) existem as pastas: compiler, rtl, packages, utils. Se não existir procure e memorize esta pasta/caminho onde estas pastas estão
  4. Abra o terminal (cmd) e digite os seguintes comandos:

6.1) Este passo é sensivel a sua arquitetura do Lazarus/FreePascal (Win32 ou Win64)

Se seu Lazarus é 32 bits digite a linha abaixo: PATH=c:\lazarus\fpc\3.0.4\bin\i386-win32;%PATH%

Se seu Lazarus é 64 bits digite a linha abaixo: PATH=c:\lazarus\fpc\3.0.4\bin\x86_64-win64;%PATH%

6.2) cd c:\fpc304sources // ou cd <caminho q vc memorizou no passo 5>

6.3) Este passo é sensivel a sua arquitetura do seu target, Linux i386 (32 bits) ou Linux amd64 (64 bits)

Se deseja preparar o compilador para gerar aplicativos para Linux i386 - 32 bits: digite a linha abaixo: make CPU_TARGET=i386 OS_TARGET=linux all

Se deseja preparar o compilador para gerar aplicativos para Linux amd64 - 64 bits: digite a linha abaixo: make CPU_TARGET=x86_64 OS_TARGET=linux all

6.4) Este passo é sensivel a sua arquitetura do seu target, Linux i386 (32 bits) ou Linux amd64 (64 bits)

Se deseja preparar o compilador para gerar aplicativos para Linux i386 - 32 bits: digite a linha abaixo: make crossinstall CPU_TARGET=i386 OS_TARGET=linux PREFIX=c:\Lazarus\fpc\3.0.4

Se deseja preparar o compilador para gerar aplicativos para Linux amd64 - 64 bits: digite a linha abaixo: make crossinstall CPU_TARGET=x86_64 OS_TARGET=linux PREFIX=c:\Lazarus\fpc\3.0.4

Se você irá tentar realizar estes passos em um ambiente com Delphi, Visual Studio ou qualquer outro ambiente de desenvolvimento que disponibilize a ferramenta make, verifique se os passos acima estão usando o "make" que acompanha o FPC/Lazarus. Caso contrário, erros estranhos podem acontecer nos passos 6.3 e 6.4

Pronto, se vc conseguiu executar os passos acima, isto significa que está configurado seu ambiente. Agora vamos configurar seu aplicativo para que ele possa ser compilado no Windows para o Linux

  1. Este passo é sensivel a sua arquitetura do seu target, Linux i386 (32 bits) ou Linux amd64 (64 bits) Baixe as libs do SO alvo (Linux) do site do codetyphon:

Se deseja compilar para Linux i386 - 32 bits: https://www.pilotlogic.com/sitejoom/index.php/downloads/send/16-linux/132-i386-linux-7z

Se deseja compilar para Linux amd64 - 64 bits: https://www.pilotlogic.com/sitejoom/index.php/downloads/download/16-linux/133-x86-64-linux-7z

  1. Extrair estas libs em algum de sua preferencia, MEMORIZAR O PATH
  2. Abra o lazarus e seu projeto
  3. Vá nas opçoes do projeto, Menu Project => Project options, ou simplemente pressione ctrl+Shift+f11 === NOTA: Recomendo vc criar um novo build mode para gerar pra Linux, antes de executar os passos seguintes ===
  4. Na tela aberta, vá em Compiler Options => Paths, e localize o item Libraries (-Fl) e adicione o path onde vc extraiu as libs do passo 7
  5. Este passo é sensivel a sua arquitetura do seu target, Linux i386 (32 bits) ou Linux amd64 (64 bits) Na mesma tela, vá em Compiler Options => Config and Target.

Em "Target OS (-T)" escolha: linux.

Em "Target CPU family (-P)" escolha: Se deseja compilar para Linux i386 - 32 bits: i386. Se deseja compilar para Linux amd64 - 64 bits: x86_64.

Feito as duas escolhas pressione OK e feche a tela.

  1. Compile sua aplicação pra Linux.

Dependendo dos componentes utilizados em sua aplicação, eles podem fazer uso de bibliotecas (vulgo DLL) que podem não terem sido disponibilizadas com o pacote de bibliotecas do CodeTyphon, gerando erros na etapa de ligação (linking) dos arquivos objeto para formar o executável. Neste caso, localize o pacote da distribuição Linux que você pretende rodar sua aplicação e extraia a "DLL"/biblioteca na mesma pasta onde foram extraidos os arquivos no passo 2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment