Difference between revisions of "Cross compiling/ru"

From Lazarus wiki
Jump to navigationJump to search
Line 11: Line 11:
 
Компилятор это только одна часть. Нам также необходимо ассемблер и компоновщик. FPC обеспечивает встроенный ассемблере и/или линкер только для некоторых платформ, другие платформы должны использовать внешние инструменты для этого. И эти средства, как правило, не в состоянии создать двоичные файлы для различных платформ. Вот почему мы должны различать специальный компоновщик 'ld' и ассемблер 'as' для каждой целевой платформы. Это [[Binutils | binutils]].
 
Компилятор это только одна часть. Нам также необходимо ассемблер и компоновщик. FPC обеспечивает встроенный ассемблере и/или линкер только для некоторых платформ, другие платформы должны использовать внешние инструменты для этого. И эти средства, как правило, не в состоянии создать двоичные файлы для различных платформ. Вот почему мы должны различать специальный компоновщик 'ld' и ассемблер 'as' для каждой целевой платформы. Это [[Binutils | binutils]].
  
==Юниты для целевой платформы==
+
==Модули для целевой платформы==
После создания (или имеющихся/установленных) кросс инструментов, нужно скомпилировать FPC RTL и другие юниты для выбранной целевой платформы. Например, каждая целевая платформа требует другой файл system.ppu (системный юнит), и т.д. Эти юниты могут быть либо скомпилированы с помощью компилятора созданным для компиляции под целевую платформу, либо вы можете потенциально использовать официально распространяемые юниты скомпилированные (и распространяемые) с точно такой же версии FPC (если имеются в полезном формате под конкретную хост-платформу).
+
После создания (или имеющихся/установленных) кросс инструментов, нужно скомпилировать FPC RTL и другие модули для выбранной целевой платформы. Например, каждая целевая платформа требует другой файл system.ppu (системный модуль), и т.д. Эти модули могут быть либо скомпилированы с помощью компилятора созданным для компиляции под целевую платформу, либо вы можете потенциально использовать официально распространяемые модули скомпилированные (и распространяемые) с точно такой же версией FPC (если имеются в полезном формате под конкретную хост-платформу).
  
 
==Конфигурация==
 
==Конфигурация==

Revision as of 17:36, 30 January 2014

Template:Translate=Предисловие= Это краткое введение для новичков. В следующих разделах описывается, как настроить систему для кросс компиляции, что означает создание бинарных файлов (исполняемых файлов) для различных платформ, которые используются для компиляции - например, работающие под Linux и создание исполняемых файлов Win32 (или FreeBSD, Darvin, и т.д.). В этом случае платформа, используемая для компиляции, как правило называется "хост" (Linux в примере выше), и платформа, на которой вы хотите создавать файлы ваша "цель". FreePascal является компилятором и в основном преобразует исходники в исполняемые файлы (машинный язык). Эти файлы содержат информацию о том, как операционная система начинает исполнять файлы. Кроме того, бинарные файлы обращаются к API, предоставляемые конкретной операционной системой, поэтому различные реализации нашей Run-time библиотеки необходимы для различных операционных систем. Поэтому эти двоичные файлы специфичны для разных платформ. FreePascal сам по себе не нуждается в длительной настройке. Он может создавать исполняемые файлы для многих платформ. Просто скажите ему сделать это.

Хост и цель на том же процессоре

FPC устроен так, что распределенный компилятор может создать машинный код для определенного процессора (потому что разные процессоры нуждаются в различном машинном коде), и он знает конкретные требования для всех поддерживаемых платформ (операционных систем), доступных на данном процессоре. Это означает, что вы можете выполнять кросс-компиляции с тем же компилятором, используемым для собственной компиляции до тех пор, пока Вы придерживаетесь того же процессора.

Хост и цель на разных процессорах

Если вам нужно создать двоичные файлы для различных процессоров, вам нужен специальный кросс-компилятор, то есть компилятор работающий на хост платформе, но который в состоянии создать машинный код для различных процессоров (в случае FPC, например кросс-компилятор должен быть способен работать для всех поддерживаемых платформах доступных на _target_ CPU). Это кросс-компилятор обычно хранится в том же каталоге, что и родной компилятор. Такой кросс-компилятор может быть либо собран вами вручную, или Вы можете использовать готовый распространяемый кросс-компилятор предоставленный для некоторых платформ непосредственно FPC командой (обычно платформы в основном используемые в портативных устройствах, такие как arm-linux или arm-wince, потому что они обычно не используются в качестве хост-платформ). Fpc бинарник может выбрать нужный компилятор (как родной компилятор или кросс-компилятор) для целевого процессора выбирается с помощью параметра-P.

Ассемблер и компоновщик

Компилятор это только одна часть. Нам также необходимо ассемблер и компоновщик. FPC обеспечивает встроенный ассемблере и/или линкер только для некоторых платформ, другие платформы должны использовать внешние инструменты для этого. И эти средства, как правило, не в состоянии создать двоичные файлы для различных платформ. Вот почему мы должны различать специальный компоновщик 'ld' и ассемблер 'as' для каждой целевой платформы. Это binutils.

Модули для целевой платформы

После создания (или имеющихся/установленных) кросс инструментов, нужно скомпилировать FPC RTL и другие модули для выбранной целевой платформы. Например, каждая целевая платформа требует другой файл system.ppu (системный модуль), и т.д. Эти модули могут быть либо скомпилированы с помощью компилятора созданным для компиляции под целевую платформу, либо вы можете потенциально использовать официально распространяемые модули скомпилированные (и распространяемые) с точно такой же версией FPC (если имеются в полезном формате под конкретную хост-платформу).

Конфигурация

Когда ваш FPC конфигурационный файл будет подготовлен, кросс-компиляция станет настолько простой, что вы сможете забыть все эти скучные детали. То же самое должно быть сделано для LCL - библиотеки компонентов Lazarus (при её использовании). И после этого вы можете кросс-компилировать программы на Паскале на разные целевой платформы. В результате файлы могут быть скопированы на машину под управлением целевой платформы, или работать под эмулятором (например, Wine для Win32 файлов под Linux, и т.д.).

Основные шаги

Есть несколько общих этапов кросс-компилляции, которые вы должны сделать в каждом конкретном случае:

  1. Уже имеющийся FreePascal компилятор для платформы для которой вы хотите скомпилировать.
  2. Вы должны иметь исходный код FreePascal (за исключением частного случая если все уже подготовлено кем-то другим).
  3. Вы должны либо сделать билд из исходников или получить бинарные файлы кросскомпиллятора cross-Binutils, которые работают на платформе на которой вы находитесь, и предназначены для сборки программ для желаемой целевой платформы.
  4. Иногда вам будут нужны некоторые файлы из целевой платформы для которой вы компилируете код.