Cross compiling/ru

From Lazarus wiki
Revision as of 13:50, 14 July 2015 by FTurtle (talk | contribs)
Jump to navigationJump to search

Deutsch (de) English (en) español (es) français (fr) magyar (hu) português (pt) русский (ru) 中文(中国大陆)‎ (zh_CN) 中文(台灣)‎ (zh_TW)

Предисловие

Это краткое введение для новичков. В следующих разделах описывается, как настроить систему для кросс компиляции, что означает создание бинарных файлов (исполняемых файлов) для различных платформ, которые используются для компиляции - например, работающие под 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. Иногда вам будут нужны некоторые файлы из целевой платформы для которой вы компилируете код.

Быстрый способ настройки IDE и компиляции из под Linux для Windows

Существует сборка Lazarus, содержащая в себе большое количество предустановленных элементов (в том числе и необходимых для кросскомпиляции). Зовётся она CodeTyphon Далее описан способ установки и настройки среды программирования, автоматически компиллирующую под win32/win64/linux (на выбор). При запуске программа будет открывать свежие сборки в wine.

Установка CodeTyphon

На примере ubuntu 12.10 (13.04) (источник)

1. Скачайте последнюю версию CodeTyphon

http://www.pilotlogic.com/

2. Распакуйте архив в папку, например:

/home/ct

3. Войдите в эту папку (команда cd и путь к папке) из терминала с привилегиями суперпользователя и начать

   ./install.sh

(Или запретный способ через GUI: в свойствах файла поставить галку, разрешающую запуск в качестве приложения)


4. Только при первой установке CodeTyphon в вашем компьютере, выберите опцию

   (3) "Install System Libraries" (примерно 10 минут)

для Ubuntu 12.10, Вы должны будете вручную добавить эти пакеты (второй может и отсутствовать)
           sudo apt-get install binutils-dev devel-essential


5. После установки системных библиотек запустите снова "Install.sh" и выберите опцию

   (0) "Install CodeTyphon Studio"

6. После операции копирования, выберите опцию


    (8) "Remove and Build All" (примерно 15 минут)


Установка кросскомпилятора

1. После всех действий у вас установлен в Dash CodeTyphon Студия (именно утилита для настройки компонентов Typhon ака Lazarus), запустите его (с правами суперпользователя (sudo codetyphon))

и выберите:

Cross-Build (в меню приложения сверху) и выберите нужную платформу среди компилляторов


2. Затем Вы должны запустить Лазаря (у меня он зовётся Typhon32) и выбрать необходимый FPC (сервис-параметры-окружение-путь компилятора (fpc)), например:

   /usr/lib/codetyphon/fpc/bin/(название папки зависит от вашей системы)/ppcx64 (for Linux64)
   /usr/lib/codetyphon/fpc/bin/(название папки зависит от вашей системы)/ppcross386 (for Win32)
   /usr/lib/codetyphon/fpc/bin/(название папки зависит от вашей системы)/ppcrossx64 (for Win64)

Настройка проекта и запуска в wine

1. Сервис-параметры-отладчик-тип отладчика и путь

Ставим тип отладчика (none)

2. Не забудьте выбрать меню проект-параметры проекта-параметры компилятора-настройка и целевая платформа-целевая платформа-операционная система (-Т):

   Linux
   Win32
   Win64

3. В меню по пути запуск-параметры сборки+запуска-запуск-команда запуска заменяем

wine $(EdFile)


Собственно всё готово! Единственное требование: программыдолжны храниться на диске вайна (/home/(имя-пользователя)/.wine/drive_с)

Собственно всё должно работать. Дополнительно можно настроить:

  • уменьшение размера выходных файлов (убрать отладочную информацию и прочее)
  • добавление графической библиотеки для windows