кръстосано компилиране
Предговор
Това е кратко въведение за начинаещи. Следващите раздели описват как да настроите системата за кръстосано компилиране, което означава създаване на двоични файлове (изпълними) за платформа, различна от тази, използвана за компилация, например работеща под Linux и създаване на изпълними файлове на Win32 (или FreeBSD или Darwin и т.н.). В този случай платформата, използвана за компилация, обикновено се нарича"host"[(host)] (Linux в примера по-горе), а платформата, на която искате да стартирате генерираните двоични файлове, е вашата"target"[(target)]. FreePascal е компилатор и основно преобразува изходния код в двоични файлове (машинен език). Тези двоични файлове също съдържат информация за това как операционната система изпълнява изпълними файлове. Освен това двоичните файлове се отнасят до API, предоставени от конкретна операционна система, така че различните операционни системи изискват различна реализация на нашата библиотека за изпълнение. Следователно тези двоични файлове са специфични за платформата. Самият FreePascal не се нуждае от много персонализиране. Може да създава двоични файлове за много платформи. Така че просто кажете на [компилатора] да го направи.
Хост и цел на един и същ процесор
FPC е проектиран по такъв начин, че разпределеният компилатор да може да произвежда собствен код за конкретен процесор [(CPU)] (тъй като различните процесори се нуждаят от различен компютърен код) и знае специфичните изисквания за всички поддържани платформи (операционни системи), налични на този конкретен процесор. Това означава, че можете да компилирате кръстосано със същия компилатор, използван за вградена компилация, ако виепридържайте се към същия процесор.
Хост и цел на различни процесори
Ако трябва да генерирате двоични файлове за различен процесор, имате нужда от специален кръстосан компилатор, т.е. компилатор, който работи на хост платформата, но може да генерира машинен код за различен процесор (в случай на FPC, такъв кръстосан компилатор може отново да бъде насочен към всички поддържани платформи, налични в _target_ CPU). Този крос компилатор обикновено се съхранява в същата директория като собствения компилатор. Такъв кръстосан компилатор може или да бъде компилиран от вас, или можете да използвате готов разпределен кръстосан компилатор, предоставен за някои платформи директно от екипа на FPC [разработчици] (обикновено това са платформи, които се използват главно в преносими устройства, като arm-linux или arm-wince, тъй като те обикновено не се използват като хост платформи). След това двоичният файл на Fpc може да избере правилния компилатор (собствен компилатор или крос компилатор) за целевия CPU, избран чрез опцията -P.
асемблер и линкер
Компилаторът е само една част. Нуждаем се също от асемблер и линкер. FPC предоставя вътрешен асемблер и/или линкер за някои платформи, но други платформи изискват външни инструменти. Обикновено тези инструменти не могат да създават двоични файлове за различни платформи. Ето защо трябва да използваме различен специален „ld“ линкер и „as“ асемблер за всяка целева платформа. Това [е] binutils.
Модули [необходими] за целевата платформа
След създаване (или разполагане/инсталиране) на кръстосани инструменти са необходими FPC RTL и други модули, компилирани за избраната целева платформа. Например всяка целева платформа се нуждае от различен файлsystem.ppu (Системен модул) и др. Тези модули могат да бъдат компилирани с помощта на вашия компилатор, конфигуриран да компилира на целевата платформа, или можете да използвате официално разпространени модули, компилирани (и преразпределени) с точно същата версия на FPC (ако е налична във формат, наличен за конкретната хост платформа).
Конфигурация
Тогава вашият fpc конфигурационен файл ще бъде настроен така, че кръстосаното компилиране да е толкова лесно, че можете да забравите всички скучни подробности. Същото ще бъде направено за LCL - библиотека с компоненти Lazarus (когато използвате Lazarus). И след това можете да кръстосано компилирате Pascal програми за (различна) целева платформа. След това получените двоични файлове могат да бъдат копирани на машина, работеща с целевата платформа, или да се изпълняват под емулатор (напр. Wine за Win32 двоични файлове под Linux и т.н.).
Основни стъпки
Има няколко общи стъпки за кръстосано компилиране, които трябва да следвате във всеки случай:
- Вече имате FreePascal компилатор за платформата, от която искате да компилирате.
- Трябва да имате изходния код на FreePascal (освен в специални случаи, когато всичко [е] подготвено от някой друг).
- Вие [ще] или изграждате от изходния код, или получавате двоични файлове между binutils (вижте Binutils), които [ще] работят на платформата, на която се намирате [(хост платформа)] и [ще] са проектирани да създават програми за вашата целева платформа.
- Понякога [ще] имате нужда от някои файлове от целевата [платформа], срещу която компилирате.
От Linux x64 до Linux i386
Вероятно вашата 64-битова Linux дистрибуция вече може да компилира32-битови програми, но тъй като [че] процесът на изграждане на fpc е [така] проектиран, има няколко неща, които може да се наложи да направите.
- На multiarch debian/ubuntu трябва да инсталирате пакета libc6-dev-i386
- Първо проверете дали имате файловете i386-linux-ld и i386-linux-as:
Ако имате тези файлове, пропуснете заглавката „Компилиране на FPC“ [(„Компилиране на FPC“). И двата [файла] могат да бъдат създадени с помощта на следния скрипт: