Автоматизированное место врача от Leybasoft®
Главная » 2018 » Март » 3 » Использование кросскомпиляции в Lazarus
0:23 AM
Использование кросскомпиляции в Lazarus
Итак, наконец-то я добрался и до кросскомпиляции. Не то, чтобы мне было это сильно надо (я по-прежнему считаю, что надежнее собирать проект на той ОСи, для которой он предназначен), но тут просто стало интересно.  Про кросскомпиляцию на Wiki (особенно под Windows) рассказано в довольно общих чертах и не добавляет ясности в этом вопросе :)

Различают Host-платформу (сборка Лазаруса, на которой собирается проект) и Target-платформу (ОСь определенной разрядности, для которой собирается проект).  Я опишу процесс сборки кросскомпилятора для Linux_i386 (Target) на win-x32 сборке Лазаруса (Host) и для Windows x32 (Target) на линуксовой i386 сборке Lazarus.
 

 1. Кросскомпиляция на Windows.


1. Для начала скачиваем отсюда и запускаем последний релиз замечательной программки fpcupdeluxe нужной разрядности и соответствующей ОСи



2. Определяем директорию, куда будут скачаны исходники и собраны бинарные файлы (напр., D:\Archive\development\fpcup)
3. В окне "FPC version" выбираем "trunk" и жмакаем кнопку "Only FPC" (если Lazarus у вас еще не установлен, можно установить заодно и его, выбрав соответственно тип сборки в окне "Lazarus version" и нажав "Install/Update FPC + Laz")

4. После установки FPC (и Лазаруса, если его не было) необходимо скачать сорцы и библиотеки, а также и скомпилировать бинарники для кросскомпиляции



Выбираем требуемую разрядность и ОСь (напомню, я задался целью собрать кросскомпилятор для Linux-i386) и жмем кнопку "Install cross-compiler".

В процессе закачки и последующей сборки fpcupdeluxe ругнется на отсутствие утилит для сборки кросскомпилятора и предложит их скачать ("The building of a crosscompiler failed due to missing cross-tools. Fpcupdeluxe can try to download them if available! Do you want to continue?")



Соглашаемся и повторяем процесс сборки. Он довольно длительный по времени, поэтому стоит запастись терпением. По окончанию процесса в информационной панели можно будет увидеть, куда установились бинарники кросскомпилятора:
New try building a cross-compiler for linux-i386
fpcupdeluxe: info: TAny_linux-i386: found correct binary utilities in directory D:\Archive\development\fpcup\cross\bin\i386-linux
fpcupdeluxe: info: TAny_linux-i386: found correct library in directory D:\Archive\development\fpcup\cross\lib\i386-linux


5. Теперь настраиваем Лазарус. Забегая вперед, скажу, что для кросскомпиляции лучше использовать отдельную сборку среды, чтобы не мучиться с переключением (как сделать, чтобы IDE сохраняла настройки в "своей" папке).

Для указания путей к бинарникам открываем настройки Tools --> Options --> Environment --> Files


 
  • для Compiler executable выбрать D:\Archive\development\fpcup\fpc\bin\i386-win32\ppcross386.exe
  • для FPC source directory выбрать D:\Archive\development\fpcup\fpcsrc
  • для "Make" executable выбрать D:\Archive\development\fpcup\fpc\bin\i386-win32\make.exe
Для настройки отладчика идем сюда Tools --> Options --> Environment --> Debugger

  • выбрать GNU debugger (gdb)
  • выбрать путь D:\Archive\development\fpcup\fpcbootstrap\gdb.exe

Закрываем окно с настройками среды.

6. И, наконец, создаем новый проект, открываем его настройки Project --> Project Options --> Compiler options --> Paths, где указываем путь к библиотекам для сборки проекта

  • для Libraries (-Fl) выбрать d:\development\fpcup\cross\lib\i386-linux (отобразится ..\..\..\development\fpcup\cross\lib\i386-linux)

Указываем целевые ОСь и разрядность процессора, для которых компилируется проект Project --> Project Options --> Compiler options --> Congig and Target


 
  • для Target OS (-T) выбрать Linux
  • для Target CPU family (-P) выбрать i386

Если после указания Libraries (-Fl) автоматически не установилась ссылка на виджеты Target-ОСи, то устанавливаем их вручную Project --> Project Options --> Compiler options --> Additions and Overrides

  • в комбобоксе "LCLWidgetType" выбрать "Value "GTK2".

Теперь компилируем проект (лучше по <Shift> + <F9>, иначе получим формальную ошибку отладчика). В окне сообщений после окончания процесса сборки получаем положительный результат



Проверяем полученный бинарник на целевой ОСи



Профит.
 

 2. Кросскомпиляция на Linux.

В качестве линуксовой ОСи я опишу установку на Debian 9. Рабочей директорией для fpcupdeluxe будет /home/leyba/development/fpcup.

1. Устанавливаем svn-клиент, если он еще не установлен
# sudo apt-get install subversion

2. Если у вас не установлены пакеты для компиляции Lazarus, то сначало будет выдано предупреждение об отсутствии отладчика

fpcupdeluxe: WARNING: LazarusNativeInstaller (ConfigModule: lazarus): No GNU gdb found./home/leyba

а затем fpcupdeluxe прервет установку с сообщением об отсутствии библиотек

(9015) Linking ../lazarus
/usr/bin/ld: cannot find -lgdk-x11-2.0
/usr/bin/ld: cannot find -lX11
/usr/bin/ld: cannot find -lgdk_pixbuf-2.0
/usr/bin/ld: cannot find -lgtk-x11-2.0
/usr/bin/ld: cannot find -lpango-1.0
/usr/bin/ld: cannot find -lcairo
/usr/bin/ld: cannot find -lpangocairo-1.0


Поэтому последовательно качаем
# wget http://ftp.ru.debian.org/debian/pool/main/x/x11proto-print/x11proto-print-dev_1.0.5-2_all.deb

и ставим пакет x11proto-print-dev
# sudo dpkg -i x11proto-print-dev_1.0.5-2_all.deb

Затем и остальные пакеты одной строкой
(для Debian 9)
# sudo apt-get install build-essential libx11-dev libgdk-pixbuf2.0-dev libpango1.0-dev libgtk2.0-dev gdb libgl1-mesa-dev

3. Ставим компилятор (и если необходимо, то и Lazarus) аналогично тому, как это описано для Windows

4. Теперь устанавливаем кросскомпилятор аналогично описанному для Windows, но с той разницей, что нужно будет выбрать опции CPU = i386, OS = Windows

5. Открываем настройки Lazarus  Tools --> Options --> Environment --> Files и устанавливаем следующие опции
  • для Compiler executable выбрать /home/leyba/development/fpcup/fpc/bin/i386-linux/fpc.sh (установлено по умолчанию)
  • для FPC source directory выбрать /home/leyba/development/fpcup/fpcsrc (установлено по умолчанию)
  • для "Make" executable выбрать /usr/bin/make (установлено по умолчанию)
6. Для указания отладчика идем сюда Tools --> Options --> Environment --> Debugger  и устанавливаем опции
  • выбрать GNU debugger (gdb)
  • выбрать путь /usr/bin/gdb (установлено по умолчанию)
7. Создаем новый проект и в опциях проекта Project --> Project Options --> Compiler options --> Congig and Target указываем ОСь и разрядность CPU
  • для Target OS (-T) выбрать Win32
  • для Target CPU family (-P) выбрать i386
а также набор виджетов  (напомню, мы планируем создать кросскомпиляцию приложения для win_x32) - идем сюда Project --> Project Options --> Compiler options --> Additions and Overrides 
  • в комбобоксе "LCLWidgetType" выбрать "Value "win32"
Все, теперь можно сохранить проект, а затем скомпилировать его по <Shift> + <F9> (но не запускать по <F9> - получите ошибку отладчика!) 



Проверяем полученный бинарник на целевой ОСи



Профит.

Как можно заметить, кросскомпиляция на линуксе во многом проще, чем на Windows.


 
Категория: Программирование | Просмотров: 1278 | Добавил: ZoltanLeo | Рейтинг: 0.0/0
Всего комментариев: 0
avatar