Cross compiling/pt: what changed
Revision 3 to 4. Removed lines have a minus sign; added lines have a plus sign.
| Old | New | Line | |
|---|---|---|---|
| 1 | 1 | # Introdução | |
| 2 | 2 | ||
| 3 | 3 | Esta é uma curta introdução para novatos. As seções seguintes descrevem como configurar um sistema para compilação cruzada, isto é, trabalhar no Linux and criar executáveis para Win32 (ou FreeBSD, Darwin, etc.). O Free Pascal é um compilador e basicamente converte código em binário (linguagem de máquina). Os binários também contêm informação sobre como o sistema operacional inicia o executável. Portanto os binários são específicos para cada plataforma. O Free Pascal em si mesmo não precisa de muita configuração. Ele pode criar binários para muitas plataformas. Somente lhe diga para fazer isso. Mas o compilador é somente uma parte. Existe também o montador e o vinculador, e essas ferramentas não são capazes de criar código cross-plataforma. É por isso que nós precisamos criar vinculadores especiais 'ld' e assembler 'as' para cada plataforma-alvo. Essas são as binutils. Depois de criar as ferramentas cross-plataforma, todas as unidades Pascal do FPC serão cross-compiladas. Por exemplo, existe um system.ppu para cada plataforma-alvo. Assim o seu arquivo de configuração do FPC será configurado de forma que a compilação cruzada se torne tão fácil que você pode esquecer todos os detalhes aborrecidos. O mesmo será feito para a LCL - a biblioteca de componentes do Lazarus. E depois disso você pode fazer compilação cruzada de seus programas Pascal para Win32. Ou iniciá-los no Wine ou copiá-los para uma máquina Windows e testá-los. | |
| 4 | 4 | ||
| 5 | 5 | ## Passos Básicos | |
| 6 | 6 | ||
| 7 | 7 | Existem uns poucos passos em comum implicados em compilação cruzada que você precisa cumprir em cada caso: | |
| 8 | 8 | ||
| 9 | 9 | 1. Ter um compilador Free Pascal para a plataforma em que você quer compilar. | |
| 10 | 10 | 2. Ter o código-fonte do Free Pascal. | |
| 11 | 11 | 3. Ou construí-lo dos fontes ou obter os binários das cross-binutils que executem na plataforma em que você está e são desenhadas para construir programas para a plataforma-alvo desejada. | |
| 12 | 12 | 4. Às vezes você vai precisar de alguns arquivos da plataforma para onde está compilando. | |
| 13 | 13 | ||
| 14 | 14 | # De Linux | |
| 15 | 15 | ||
| 16 | 16 | ## Para Linux | |
| 17 | 17 | ||
| 18 | 18 | Fique claro que isso é para compilar de Linux(x86_64) para Linux(i386). | |
| 19 | 19 | ||
| 20 | 20 | Há chances de a sua distribuição Linux 64 bits já possibilitar a compilação de programas 32 bits mas devido à maneira como o processo de construção do FPC é desenhado existem algumas coisas que você vai precisar fazer: | |
| 21 | 21 | ||
| 22 | 22 | - Primeiro cheque se você já tem os arquivos i386-linux-ld e i386-linux-as: | |
| 23 | 23 | ||
| 24 | - | ||
| 25 | - | ||
| 24 | + | ```text | |
| 25 | + | bash $ which i386-linux-ld | |
| 26 | + | bash $ which i386-linux-as | |
| 27 | + | ``` | |
| 26 | 28 | ||
| 27 | 29 | Se você tem esses arquivos, pule para o título "Compilar o FPC". Se você não tem os arquivos, eu fiz alguns scripts: | |
| 28 | 30 | ||
| 29 | - | ||
| 30 | - | ||
| 31 | - | ||
| 31 | + | ```text | |
| 32 | + | #!/bin/bash | |
| 33 | + | # name this file /usr/bin/i386-linux-ld | |
| 34 | + | ld -A elf32-i386 $@ | |
| 35 | + | ``` | |
| 32 | 36 | ||
| 33 | - | ||
| 34 | - | ||
| 35 | - | ||
| 37 | + | ```text | |
| 38 | + | #!/bin/bash | |
| 39 | + | # name this file /usr/bin/i386-linux-as | |
| 40 | + | as --32 $@ | |
| 41 | + | ``` | |
| 36 | 42 | ||
| 37 | 43 | - Fazê-los um executável: | |
| 38 | 44 | ||
| 39 | - | ||
| 40 | - | ||
| 45 | + | ```text | |
| 46 | + | bash $ chmod +x /usr/bin/i386-linux-as | |
| 47 | + | bash $ chmod +x /usr/bin/i386-linux-ld | |
| 48 | + | ``` | |
| 41 | 49 | ||
| 42 | 50 | - Compilar o FPC: | |
| 43 | 51 | ||
| 44 | - | ||
| 52 | + | ```text | |
| 53 | + | bash $ make all CPU_TARGET=i386 | |
| 54 | + | ``` | |
| 45 | 55 | ||
| 46 | 56 | então: | |
| 47 | 57 | ||
| 48 | - | ||
| 58 | + | ```text | |
| 59 | + | bash $ su -c "make install CPU_TARGET=i386" | |
| 60 | + | ``` | |
| 49 | 61 | ||
| 50 | 62 | É isso. Edite seu arquivo /etc/fpc.cfg se necessário. | |
| 51 | 63 | ||
| 52 | 64 | ## Para Windows | |
| 53 | 65 | ||
| 54 | 66 | Manual oficial [[Cross compiling for Windows under Linux]]\ | |
| 55 | 67 | Manual para Lazarus 0.9.22 e FPC 2.0.4 <http://fdavid.com.br/blog/?p=4> | |
| 56 | 68 | ||
| 57 | 69 | Se você está compilando a versão 2.1.1 ou superior do FPC, você pode apenas fazer: | |
| 58 | 70 | ||
| 59 | - | ||
| 71 | + | ```text | |
| 72 | + | bash $ make all OS_TARGET=win32 CPU_TARGET=i386 | |
| 73 | + | ``` | |
| 60 | 74 | ||
| 61 | 75 | e então | |
| 62 | 76 | ||
| 63 | - | ||
| 77 | + | ```text | |
| 78 | + | bash $ su -c "make crossinstall OS_TARGET=win32 CPU_TARGET=i386" | |
| 79 | + | ``` | |
| 64 | 80 | ||
| 65 | 81 | Nota: para construir para Win64, o comando make é: make all OS TARGET=win64 CPU_TARGET=x86_64 | |
| 66 | 82 | ||
| 67 | 83 | A razão dessa simplicidade é o vinculador interno incluído nessa versão do FPC. | |
| 68 | 84 | ||
| 69 | 85 | ## Para Darwin ou macOS | |
| 70 | 86 | ||
| 71 | 87 | - Primeiro você precisa das binutils para a plataforma para a qual você quer compiilar. Baixe o odcctools deste site (use a versão CVS) e siga as instruções de instalação. <http://www.opendarwin.org/projects/odcctools/> | |
| 72 | 88 | - Você precisa criar um falso diretório root, como: \$HOME/darwinroot. Copie pelo menos os diretórios /System e/Frameworks e /usr (você deve ter que copiar mais do que isso) do seu computador Aple ou Darwin para \$HOME/darwinroot. | |
| 73 | 89 | - Agora que você tem esses arquivos, crie uma pasta em \$HOME/darwinroot chamada cross. Em qualquer lugar que você tenha instalado o odcctools você precisa fazer links for the cross tools to be more fpc friendly. Existe um grupo de arquivos de ferramentas odcc chamado powerpc-apple-darwin-*. Você precisa fazer links (ou renomeá-los) de modo que o powerpc-apple-darwin-ld se torne powerpc-darwin-ld. Faça o mesmo com *-ar *-as. | |
| 74 | 90 | - Agora você está pronto para cross-compilar o FPC. Basicamente você precisa ter o código-fonte do FPC e uma janela de terminal aberta. | |
| 75 | 91 | ||
| 76 | 92 | Escreva: | |
| 77 | 93 | ||
| 78 | - | ||
| 94 | + | ```text | |
| 95 | + | $PATH=$PATH:$HOME/darwinroot/cross (ou onde você fez os symlinks) | |
| 96 | + | ``` | |
| 79 | 97 | ||
| 80 | 98 | Escreva (iirc): | |
| 81 | 99 | ||
| 82 | - | ||
| 100 | + | ```text | |
| 101 | + | make all TARGET_OS=darwin TARGET_CPU=powerpc OPT="-Xd -Fl/$HOME/darwinroot/usr/lib" | |
| 102 | + | ``` | |
| 83 | 103 | ||
| 84 | 104 | Se isso der certo você pode instalá-lo em qualquer lugar que queira com: | |
| 85 | 105 | ||
| 86 | - | ||
| 106 | + | ```text | |
| 107 | + | make install TARGET_OS=darwin TARGET_CPU=powerpc PREFIX=/cross/fpc | |
| 108 | + | ``` | |
| 87 | 109 | ||
| 88 | 110 | Agora copie o arquivo ./compiler/ppccross para onde você possa achá-lo, pois esse é o compilador que você vai precisar para construir programas para PowerPC. | |
| 89 | 111 | ||
| 90 | 112 | - Configure o seu arquivo /etc/fpc.cfg. | |
| 91 | 113 | ||
| 92 | 114 | Adicionne uma seção como essa: | |
| 93 | 115 | ||
| 94 | - | ||
| 95 | - | ||
| 96 | - | ||
| 97 | - | ||
| 98 | - | ||
| 99 | - | ||
| 116 | + | ```text | |
| 117 | + | #IFDEF powerpc | |
| 118 | + | -Fu/cross/fpc/lib/fpc/$fpcversion/units/$fpctarget/ | |
| 119 | + | -Fu/cross/fpc/lib/fpc/$fpcversion/units/$fpctarget/rtl | |
| 120 | + | -Fu/cross/fpc/lib/fpc/$fpcversion/units/$fpctarget/* | |
| 121 | + | -k-systemroot $HOME/darwin/cross | |
| 122 | + | #ENDIF | |
| 123 | + | ``` | |
| 100 | 124 | ||
| 101 | 125 | Sempre que você queira cross-compilar você precisa ter o ppccross e os symlinks para powerpc-darwin-* no seu Path. E você deve poder fazer o pcccross someprogie.pas e ele vai criar o executável Darwin. | |
| 102 | 126 | ||
| 103 | 127 | # De Windows | |
| 104 | 128 | ||
| 105 | 129 | ## Para Linux | |
| 106 | 130 | ||
| 107 | 131 | (Marco vd Voort) | |
| 108 | 132 | ||
| 109 | 133 | Para compilar para Linux do Windows: (o procedimento de FreeBSD não será muito diferente, copiar o cprt0 não é necessário para FreeBSD) | |
| 110 | 134 | ||
| 111 | 135 | Requisitos: | |
| 112 | 136 | ||
| 113 | 137 | \- FPC 1.9.6 ou superior. 1.9.4 deve funcionar, mas não foi testado. | |
| 114 | 138 | ||
| 115 | 139 | -ftp://freepascal.stack.nl/pub/fpc/contrib/cross/mingw/binutils-2.15-win32-i386-linux.zip | |
| 116 | 140 | ||
| 117 | 141 | \- O FPC do repositório CVS (qualquer um acima de 1.9.6). | |
| 118 | 142 | ||
| 119 | 143 | \- Um árvore do Lazarus (qualquer uma construível a partir do mesmo período). | |
| 120 | 144 | ||
| 121 | 145 | \- Muitas bibliotecs do Linux alvo. Um dos servidores FPC é um SUSE, de onde eu obtive a lista abaixo: | |
| 122 | 146 | ||
| 123 | 147 | 1\) Baixar <ftp://freepascal.stack.nl/pub/fpc/contrib/cross/mingw/binutils-2.15-win32-i386-linux.zip> | |
| 124 | 148 | ||
| 125 | 149 | 2\) Extraia-o e mova os arquivos i386* para \<fpcbindir\>\bin\i386-win3 (por exemplo c:\pp\bin\i386\win32) | |
| 126 | 150 | ||
| 127 | 151 | 3\) Vá parra o diretório dos fontes do FPC | |
| 128 | 152 | ||
| 129 | 153 | 4\) make clean | |
| 130 | 154 | ||
| 131 | 155 | 5\) Faça o OS_TARGET = linux all | |
| 132 | 156 | ||
| 133 | 157 | 6\) Faça o OS_TARGET = linux e instale INSTALL_PREFIX = \<fpcbindir\> | |
| 134 | 158 | ||
| 135 | 159 | 7\) Prepare o diretório lib como nas intruções abaixo, eu usei d:\fpc\linuxlib para estocá-las. | |
| 136 | 160 | ||
| 137 | 161 | 8\) Vá para \<fpcbindir\>\units\i386-linux\rtl e copie o cprt21.o sobre o cprt0.o | |
| 138 | 162 | ||
| 139 | 163 | 9\) Vá para o diretório do Lazarus | |
| 140 | 164 | ||
| 141 | 165 | 10\) Edite o lazarus.pp e adicione {\$linklib dl} e {\$linklib gmodule} em algum lugar nos fontes. | |
| 142 | 166 | ||
| 143 | 167 | 11\) Faça o OS_TARGET = linux all OPT = "-gl -Fld:\fpc\linuxlib -Xr/usr/lib -FL/usr/lib/ld-linux.so.2" | |
| 144 | 168 | ||
| 145 | 169 | Se der algum erro do vinculador (mais especificamente linker can't find -l\<something\>) então | |
| 146 | 170 | ||
| 147 | 171 | 12\) Edite manualmente o link.res se necessário (veja abaixo para observações sobre gtk ) e adapte os nomes -l\<x\> no final dos arquivos. I had to add -1.2 to all gtk | |
| 148 | 172 | ||
| 149 | - | ||
| 173 | + | ```text | |
| 174 | + | libs, to keep them apart from gtk2 | |
| 175 | + | ``` | |
| 150 | 176 | ||
| 151 | 177 | 13\) Execute o ppas.bat para reiniciar o vinculador | |
| 152 | 178 | ||
| 153 | 179 | ### Bibliotecas | |
| 154 | 180 | ||
| 155 | 181 | Existem as bibliotecas que eu coletei para Lazarus e a IDE modo texto(o Lazarus não precisa da pthread). | |
| 156 | 182 | ||
| 157 | 183 | Eu as coletei do target system e renomeei todas de lib\<name\>.so.x.y to lib\<name\>.so. | |
| 158 | 184 | ||
| 159 | 185 | libgcc.a e umas outras são mais fáceis de encontrar fazendo gcc -v e procurando uma linha como | |
| 160 | 186 | ||
| 161 | 187 | "Reading specs from /usr/lib/gcc-lib/i486-linux/3.3.5/specs" | |
| 162 | 188 | ||
| 163 | 189 | então algumas das libs estão em /usr/lib/gcc-lib/i486-linux/3.3.5/ Uma boa outra localização é /lib /usr/lib /usr/local/lib /usr/x11R6/lib e /opt/gnome/lib | |
| 164 | 190 | ||
| 165 | 191 | libpthread.so.0 | |
| 166 | 192 | ||
| 167 | 193 | libdl.so | |
| 168 | 194 | ||
| 169 | 195 | libc.so | |
| 170 | 196 | ||
| 171 | 197 | ld-linux.so.2 | |
| 172 | 198 | ||
| 173 | 199 | crtbegin.o | |
| 174 | 200 | ||
| 175 | 201 | crtbeginS.o | |
| 176 | 202 | ||
| 177 | 203 | crtbeginT.o | |
| 178 | 204 | ||
| 179 | 205 | crtend.o | |
| 180 | 206 | ||
| 181 | 207 | crtendS.o | |
| 182 | 208 | ||
| 183 | 209 | crtn.o | |
| 184 | 210 | ||
| 185 | 211 | crti.o | |
| 186 | 212 | ||
| 187 | 213 | libgcc.a | |
| 188 | 214 | ||
| 189 | 215 | libX11.so | |
| 190 | 216 | ||
| 191 | 217 | libXi.so | |
| 192 | 218 | ||
| 193 | 219 | libglib-1.2.so | |
| 194 | 220 | ||
| 195 | 221 | libgmodule-1.2.so.0 | |
| 196 | 222 | ||
| 197 | 223 | libgdk_pixbuf.so | |
| 198 | 224 | ||
| 199 | 225 | libgdk-1.2.so | |
| 200 | 226 | ||
| 201 | 227 | libgtk-1.2.so | |
| 202 | 228 | ||
| 203 | 229 | libXext.so | |
| 204 | 230 | ||
| 205 | 231 | libm.so | |
| 206 | 232 | ||
| 207 | 233 | libdl.so.2 | |
| 208 | 234 | ||
| 209 | 235 | libgmodule-1.2.so | |
| 210 | 236 | ||
| 211 | 237 | Note que alguns diretórios estão duplicados, com ou sem sufixo. Elas são necessárias porque alguma outra lib tem dependência dela. | |
| 212 | 238 | ||
| 213 | 239 | Nome exato (assim o form lib\<name\>.so.x) Não podemos symlink no windows, então eu simplesmente o copiei. | |
| 214 | 240 | ||
| 215 | 241 | Errar ao renomear não é tão ruim, haverá chances de consertar . Tenha certeza de que todos os crt* e o arquivo "libc.so" estão disponíveis, senão gerar o link.res vai dar errado. | |
| 216 | 242 | ||
| 217 | 243 | No meu caso compilação para o passo 11 vai dar certo mas o vinculador vai dizer que não pode encontrar o libgtk.so e as outras bibliootecas marcadas com -1.2. Isso é por causa do target system, libgtk é GTK 2.0 enquanto nós queremos o gtk1.2 para o Lazarus. | |
| 218 | 244 | ||
| 219 | 245 | Para consertar isso manualmente eu adicionei -1.2 às linhas -l correspondentes no final do arquivo link.res que foi gerado no Passo 11. | |
| 220 | 246 | ||
| 221 | 247 | P.S.: Um bocado de edições do vinculador podem ser resolvidas com os beta linker control switches (-XLA and friends) em 2.0.4 e 2.1.1. Mas eles são beta, sem documentação e não necessariamente disponíveis em versões futuras. Sâo na maioria adicionados a um pacote de construtores (para Linux distros) e cross-compiladores uma chance de avaliar uma possível opção. | |
| 222 | 248 | ||
| 223 | 249 | # De Darwin (macOS) i386 | |
| 224 | 250 | ||
| 225 | 251 | ## De i386 para PowerPC | |
| 226 | 252 | ||
| 227 | 253 | - Cross Binutils | |
| 228 | 254 | ||
| 229 | 255 | Primeiro verifique se você já tem os arquivos powerpc-darwin-ld e powerpc-darwin-as: | |
| 230 | 256 | ||
| 231 | - | ||
| 232 | - | ||
| 257 | + | ```text | |
| 258 | + | $ which powerpc-darwin-ld | |
| 259 | + | $ which powerpc-darwin-as | |
| 260 | + | ``` | |
| 233 | 261 | ||
| 234 | 262 | Se você tem esses arquivos, pule a criação dos symlinks e vá para o título "Compilar o FPC" | |
| 235 | 263 | ||
| 236 | 264 | Atualmente as binutils "normais" podem ser usadas, já que elas são universais. Portanto, symlinks simples são suficientes: | |
| 237 | 265 | ||
| 238 | - | ||
| 239 | - | ||
| 266 | + | ```text | |
| 267 | + | $ sudo ln -s /usr/bin/as /usr/bin/powerpc-darwin-as | |
| 268 | + | $ sudo ln -s /usr/bin/ld /usr/bin/powerpc-darwin-ld | |
| 269 | + | ``` | |
| 240 | 270 | ||
| 241 | 271 | Os symlinks podem ficar em qualquer outro diretório, desde que estejam no seu \$PATH (por exemplo /sw/bin when installing through fink). | |
| 242 | 272 | ||
| 243 | 273 | - Compilar o FPC: | |
| 244 | 274 | ||
| 245 | - | ||
| 246 | - | ||
| 275 | + | ```text | |
| 276 | + | $ cd fpc/compiler | |
| 277 | + | $ make cycle CPU_TARGET=powerpc | |
| 278 | + | ``` | |
| 247 | 279 | ||
| 248 | 280 | Isto cria o compilarod PowerPC (fpc/compiler/ppcppc) e as unidades da RTL. | |
| 249 | 281 | ||
| 250 | 282 | Para criar os binários PowerPC nenhum cross-compilador ativo é necessário. O FPC para PowerPC e ppcppc executam bem em IntelMacs usando Rosetta. | |
| 251 | 283 | ||
| 252 | 284 | Mais teste e documentação são necessários para instalação paralela e uso dos dois. | |
| 253 | 285 | ||
| 254 | 286 | Se faltarem unidades, verifique seu arquivo de configuração, \$HOME/.fpc.cfg or /etc/fpc.cfg or /sw/etc/fpc.cfg. | |
| 255 | 287 | ||
| 256 | 288 | Você pode ter que adicionar alguma coisa like or where ever as suas unidades estiverem localizadas. | |
| 257 | 289 | ||
| 258 | - | ||
| 259 | - | ||
| 260 | - | ||
| 290 | + | ```text | |
| 291 | + | -Fu/usr/local/lib/fpc/lib/fpc/$fpcversion/units/$fpctarget/ | |
| 292 | + | -Fu/usr/local/lib/fpc/lib/fpc/$fpcversion/units/$fpctarget/rtl | |
| 293 | + | -Fu/usr/local/lib/fpc/lib/fpc/$fpcversion/units/$fpctarget/* | |
| 294 | + | ``` | |
| 261 | 295 | ||
| 262 | 296 | Lembrete: Binários universais são criados dos binários individuais (i386 and powerpc) usando lipo. | |
| 263 | 297 | ||
| 264 | 298 | Currently (fpc 3.0.4) gives: | |
| 265 | 299 | ||
| 266 | 300 | ``` bash | |
| 267 | 301 | fpc-cross-arm-gba | |
| 268 | 302 | fpc-cross-arm-linux | |
| 269 | 303 | fpc-cross-arm-nds | |
| 270 | 304 | fpc-cross-arm-wince | |
| 271 | 305 | fpc-cross-arm-armv4t-embedded | |
| 272 | 306 | fpc-cross-arm-armv7m-embedded | |
| 273 | 307 | fpc-cross-i386-darwin | |
| 274 | 308 | fpc-cross-i386-freebsd | |
| 275 | 309 | fpc-cross-i386-go32v2 | |
| 276 | 310 | fpc-cross-i386-linux | |
| 277 | 311 | fpc-cross-i386-nativent | |
| 278 | 312 | fpc-cross-i386-netbsd | |
| 279 | 313 | fpc-cross-i386-solaris | |
| 280 | 314 | fpc-cross-i386-win32 | |
| 281 | 315 | fpc-cross-i386-wince | |
| 282 | 316 | fpc-cross-jvm-android | |
| 283 | 317 | fpc-cross-jvm-java | |
| 284 | 318 | fpc-cross-m68k-linux | |
| 285 | 319 | fpc-cross-mipsel-linux | |
| 286 | 320 | fpc-cross-powerpc-linux | |
| 287 | 321 | fpc-cross-sparc-linux | |
| 288 | 322 | fpc-cross-x86-64-dragonfly | |
| 289 | 323 | fpc-cross-x86-64-freebsd | |
| 290 | 324 | fpc-cross-x86-64-linux | |
| 291 | 325 | fpc-cross-x86-64-win64 | |
| 292 | 326 | ``` | |
| 293 | 327 | ||
| 294 | 328 | For other platforms (processors and systems) you have to do the setup by yourself. It is basically the same scheme: First, you need the corresponding binutils (See [[Binutils]]) and second, the crosscompiler and the run time library. Some more details of the building procedure can be learned from the fink package description files of the crosscompilers from above. | |
| 295 | 329 | ||
| 296 | 330 | # FAQ de compilação cruzada | |
| 297 | 331 | ||
| 298 | 332 | ## Por que compilação cruzada? | |
| 299 | 333 | ||
| 300 | 334 | Assim você pode desenvolver um programa para um OS/CPU e compilá-lo para outro OS/CPU sem reiniciar ou trocar de computador. | |
| 301 | 335 | ||
| 302 | 336 | ## Por que Linux para Windows e não de outro modo? | |
| 303 | 337 | ||
| 304 | 338 | A principal razão para isso é que gerar binários Unix em plataformas estranhas (outro Unix ou mesmo distribuições Linux) é mais complicado. Vinculação estática já é complicada, ainda mais compartilhada. | |
| 305 | 339 | ||
| 306 | 340 | Você poderia precisar usar bibliotecas das plataformas-alvo (gtk, glib,libc etc) e muitas configurações adicionais para ld (bibliotecas, caminhos, dynlinker path, etc.). | |
| 307 | 341 | ||
| 308 | 342 | Isso foi parcialmente feito (para a vinculação estática) mas é difícil pois precisa de uma pós-edição manual dos arquivos do vinculador de linha de comando e um entendimento profundo sobre o que faz os binários Unix tick (funcionar?). | |
| 309 | 343 | ||
| 310 | 344 | ## Eu gostaria de mais informações sobre a construção do Free Pascal. Onde posso encontrar? | |
| 311 | 345 | ||
| 312 | 346 | Essa é uma FAQ genérica em formato pdf sobre como construir e configurar o FPC: <http://www.stack.nl/~marcov/buildfaq.pdf>. | |
| 313 | 347 | ||
| 314 | 348 | --- | |
| 315 | 349 | *From the Free Pascal wiki, page "Cross compiling/pt", as it stood on 2021-07-19 after a change by Dbannon, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).* |
