Lazarus компиляция для linux

Установка Lazarus и Free Pascal Compiler в Linux и Windows

26.08.2004
Смирнов Сергей

В этом деле есть два пути: простой и сложный. Простой путь заключается в том, чтобы просто скачать и установить бинарный релиз Lazarus, ссылку на который можно без особого труда найти на сайте проекта. Наиболее крупный недостаток этого пути — то, что версия системы будет не самая новая. В условиях относительно быстрого развития проекта придется мучительно долго ждать очередного бинарного релиза, чтобы заполучить какую-нибудь «вкусность». Поэтому, рассмотрим второй путь, тем более, что первый и описывать особо нечего. Сразу хочу предупредить, что зеркала ftp-серверов fpc обновляются довольно хаотично, поэтому будьте внимательны к датам файлов, которые собираетесь закачать.

Установка в Windows

Для начала нужно запастись всем необходимым. Я имею ввиду набор пакетов, необходимых для сборки и запуска Lazarus. Их всего три: бинарный релиз компилятора fpc, исходники Lazarus и исходники компилятора. Минимально потребуются первые два. Я не хочу давать точные ссылки на них, так как они чрезвычайно изменчивы. Лучше расскажу, как их искать. Бинарный релиз fpc можно обнаружить и на сайте самого fpc и на сайте Lazarus. Лучше брать тот, который свежее. Распаковав полученный архив в отдельный каталог, запустим install.exe и, если для обратного нет веских оснований, согласимся установить компилятор в предложенный каталог C:\pp. После этого добавим в переменную окружения PATH (в файле autoexec.bat) путь к компилятору, причем обязательно в начало, например так:

И перезагрузим компьютер. Далее будем искать самые новые исходники Lazarus. На практике — это ежедневный снапшот текущих исходников проекта, который можно обнаружить на каком-нибудь из зеркал ftp-сервера разработчиков fpc в каталоге вроде /pub/fpc/snapshot/lazarus. Скачаем и разархивируем (это будет архив lazarus.zip) исходники, допустим, в каталог C:\Lazarus, после чего запустим сеанс MS-DOS и выполним команды (их можно записать в bat-файл и запускать его):

Здесь мы в начале переходим в каталог исходных кодов, а затем просто запускаем сборку проекта в «автоматическом режиме». И не спрашивайте, зачем надо сначала скомпилировать файл ресурсов. Так устроен fpc в Windows. Последняя команда выглядит немного странно, но поверьте, без нее не обойтись. Когда мы будем пересобирать Lazarus из него самого (это необходимо при установке пакетов), он попытается перезаписать файл lazarus.exe и если тот будет загружен, а следовательно заблокирован операционной системой Windows, то случится ошибка линковщика. Именно поэтому мы переименовываем исполняемый файл и запускаем именно его. Разумеется, не обязательно использовать имя lazarus1.exe. Это может быть lazarus_safe.exe или любое другое имя, допустимое в ОС. Учитывая, что перекомпилировать Lazarus нам придется неоднократно, добавим в наш пакетный файл команды очистки. В итоге, например у меня, получается следующее:

Если Lazarus благополучно собрался, то можно уже запустить lazarus1.exe (или как Вы его там назвали). И первое сообщение, которое мы увидим будет о том, что не указан каталог с исходниками fpc. Это нормально. Продолжим работу. Через пару секунд система закончит грузиться и мы сможем удовлетворенно покидать контролы на макет формы автоматически создавшегося проекта. Без исходников fpc ничего больше сделать не получится.

Если компиляция Lazarus завершилась сообщением об ошибке или его запуск вызвал ошибку, то проще всего день подождать и попытаться с новым снапшотом, либо получить обновление через сервер cvs проекта. Как правило Lazarus должен собираться той версией компилятора, которая рекомендуется на сайте Lazarus и которую мы, надеюсь, и установили. Итак, будем считать, что все в порядке. Приступим к заключительному этапу.

И тут нас может ждать одна большая проблема: довольно часто команда разработчиков fpc не снабжает промежуточный релиз компилятора исходниками. Именно так обстоят дела с последней на сегодня версией 1.9.4. Оставим это на их совести и посмотрим, что можно сделать. К счастью, разработчики Lazarus сами заботятся об этом и на их сайте обычно можно найти исходники практически точно соответствующие банарному релизу компилятора. Если окажется, что это не так, у нас не будет другого выхода, как собрать компилятор самостоятельно или «накатить» бинарный снапшот. Последний способ представляется мне гораздо более затратным. Есть в обновлении компилятора и другой соблазн: все невизуальные компоненты Lazarus входят в состав библиотеки fcl, которая является частью компилятора, поэтому собирать новейшую версию Lazarus старым fpc зачастую просто не имеет смысла.

Читайте также:  Patch command in windows

Для начала скачаем снапшот исходников fpc с одного из зеркал его сервера. Обычно это . /pub/fpc/snapshot/v19/source/fpc.zip или что-то вроде того. Распакуем архив в любое место (наверное, лучше, чтобы путь был без пробелов) и запустим сеанс MS-DOS, в котором вначале перейдем в корневой каталог исходников (это там, где каталоги compiler, demo, doc и т.д.), а потом (в предположении, что fpc у нас установлен в C:\pp\bin\win32) выполним пару команд:

Разумеется, если первая из команд завершится с ошибкой, то вторую выполнять не следует. В этом случае лучше подождать немного или, наоборот, взять более старые исходники. Больше ничего делать не надо. Если обе команды отработали успешно, то считайте, что у Вас уже новый компилятор. Теперь заново соберем и запустим Lazarus. Если это удалось сделать, то остается только указать ему каталог с исходниками fpc с помощью меню environment-environment options (окружение-параметры окружения). Если удалось найти исходники для уже готового бинарного дистрибутива fpc, то шаги с перекомпиляцией компилятора и Lazarus можно опустить. Всё. Lazarus готов к работе.

В заключение, не могу не заметить, что с каждым разом дистрибутив, подготовленный разработчиками Lazarus и включающий в себя всё необходимое, становится всё лучше и лучше. Пройдёт ещё немного времени и описанные здесь манипуляции будут нужны разве что для срочной сборки текущей девелоперской версии системы.

Установка в Linux

Если Вы еще не прочитали начало предыдущей главы, то самое время это сделать, потому, что установка Lazarus в Linux начинается с того-же самого: добывания установочных пакетов. Разница лишь в том, что бинарный дистрибутив fpc должен быть пригодным для Вашего дистрибутива Linux. У меня ASPLinux на 3-х дисках и поэтому я скачал и без малейших проблем установил rpm-пакет fpc 1.9.4. Исходники Lazarus и более свежей версии fpc у меня остались от установки под Windows.

Если у Вас простенький однодисковый дистрибутив, то, скорее всего, Вам придется сделать две вещи: доустановить пакеты binutils, make и gdb (которые проще всего найти на ftp-сервере разработчика дистрибутива) и создать симлинки на кой-какие библиотеки, используемые Lazarus. Например, для ALTLinux Junior мне пришлось выполнить вот такой нехитрый скрипт:

После этого можно собрать Lazarus просто командой make, находясь в корне каталога его исходников. «Пляски с бубном» как в Windows тут не нужны. В случае успешной сборки в этом каталоге появится исполняемый файл lazarus. Его и надо запускать. Еще удобнее создать на него ссылку на рабочем столе. И точно также надо указать расположение исходников используемой версии компилятора fpc. Если они у Вас есть. Если их нет, придется перекомпилировать компилятор. Как и в Windows, исходники fpc надо распаковать куда-нибудь и из их корневого каталога выполнить команды:

Только, в отличие от Windows, этого не будет достаточно. Вторая команда установит компилятор по-умолчанию куда-нибудь вроде /usr/local/lib/fpc в подкаталог 1.9.5, который можно там и оставить, а можно положить рядом с исходным, который у меня, например, лежит в /usr/lib/fpc. Можно также задать нужные префиксы еще при сборке, если не лень. Дальше необходимо создать новый файл конфигурации fpc.cfg, для чего предусмотрен специальный скрипт, который и надо выполнить, находясь в каталоге нового компилятора (у меня получилось в /usr/lib/fpc/1.9.5):

Здесь /etc — это каталог, где у Вас лежит fpc.cfg. И, наконец, последнее, что нужно сделать — это создать новый симлинк (ppc386) в каталоге /usr/bin на новый компилятор. Всё. Еще раз компилируем Lazarus и если все нормально — можно работать.

«Подводные камни». Их, наверное, много, но я заметил пока два. Первый — если не удалить каталог /home/ваш_логин/.lazarus с настройкими среды, то можно получить мощный сбой при автоматической загрузке последнего проекта, если он использовал какой-нибудь нестандартный пакет (его ведь ещё не успели установить). Для борьбы с этим в последних версиях Lazarus даже предусмотрен специальный ключ командной строки —skip-last-project. Второй связан с русификацией. Если у Вас стоит локаль cp1251, то при первом запуске Lazarus на экране будут «иероглифы», так как русификация Lazarus рассчитана на KOI-8R. Придется действовать вслепую. Вот так можно выбрать меню «Окружение»-«Параметры окружения»:

И установить нужную кодовую страницу русификации среды Lazarus:

Читайте также:  Можно ли подключить apple клавиатура для windows

Дальше надо нажать «OK», закрыть и повторно запустить Lazarus. Если удалить каталог с его настройками, то эту забавную процедуру придется повторить снова. В остальном, все проходит относительно гладко. Среда напоминает Delphi, хотя есть и отличия. Некоторое недоумение вызывает отсутствие компонент для работы с источниками данных. Разработчики объясняют это связью соответствующих пакетов с нестандартными библиотеками, в случае отсутствия которых эффект будет напоминать описанный выше первый «подводный камень». Но, что есть — то есть. На самом деле, установить пакет довольно легко, но это уже отдельная тема.

Источник

Cross compiling for Win32 under Linux/ru

Contents

Заметки по кросс-компиляции исполняемых файлов Win32 из Linux

Начиная с 0.9.10 существует rpm ‘fpc-crosswin32’, который устанавливает необходимые утилиты binutils (например кросс ассемблер, кросс линкер), fpc .ppu файлы скомпилированные для win32 и вносит изменения в /etc/fpc.cfg.

Он не включает кросс-скомпилированные LCL .ppu файлы. Вам нужно скомпилировать их самостоятельно после установки, fpc-crosswin32.

Lazarus и Free Pascal Compiler

О кросс-компиляции — понимайте то что вы делаете

Это короткое введение для новичков. В последующих разделах описывается как настроить систему для кросс-компиляции, имеется ввиду работая под linux создавать исполняемые файлы win32 (или freebsd, или dawin, или. ) Почему кросс-компиляция: FreePascal это компилятор, преобразующий исходный код в исполняемые файлы (на машинном языке). Эти исполняемые файлы, кроме всего прочего, содержат информацию о том как операционная система запускает их на выполнение. Поэтому исполняемые файлы являются платформенно-зависимыми. Сам FreePascal не требует различных дистрибутивов. Он может создавать исполняемые файлы для многих платформ. Просто укажите ему это. Но компилятор — это только одна часть. Существует ещё ассемблер и линкер. И эти утилиты не способны создавать кроссплатформенный код. Поэтому были созданы специальные утилиты линкер ‘ld’ и ассемблер ‘as’ для каждой целевой платформы. Это binutils. После создания кроссплатформенных утилит все модули fpc pascal будут кросс-компилированы. Например, для каждой из целевых платформ существует отдельный файл system.ppu. Затем ваш конфигурационный файл fpc.cfg будет перенастроен, таким образом кросс-компиляция станет настолько лёгкой, что вы сможете забыть обо всех мелочах. То же самое нужно проделать и с LCL — lazarus component library. И после этого вы сможете кросс-компилировать программы на паскале для win32. Затем проверить их при помощи wine или скопировать на машину с Windows и протестировать на ней.

Почему из *nix в windows а не по-другому.

Основная причина — генерирование unix-бинарников на другой платформе (другой unix или Linux) более сложно. Более сложное статическое связывание, не говоря уж об остальном.

Придется использовать библиотеки из целевой платформы (gtk, glib, libc и т.д.), и множество дополнительных настроек для ld. (пути к библиотекам, путь к линкеру и т.д.)

Это было частично сделано (в статическом случае), но это сложно т.к. требует внесения изменений в файлы линкера и командную строку линкера, а также глубокого понимания о сборке бинарников Unix.

Скачивание исходных кодов FPC

Исполняемых файлов недостаточно, вам потребуются все исходники fpc. Обратитесь к www.freepascal.org. Вы можете использовать SVN или ежедневные сборки. Для следующих примеров исходники fpc были скачены в папку

Скачивание gnu binutils.

Например, binutils-2.18.tar.gz скачайте в

Кроссплатформенная сборка binutils

В репозитории fpcbuild существует скрипт для сборки binutils для всех поддерживаемых целевых платформ: install/cross/buildcrossbinutils

Скачиваем инсталлятор fpcbuild:

Создаём копию скрипта:

Правим переменные в начале нового скрипта.

Переменная BASE указывает на директорию сборки и установки. Директория должна быть пустой. Например:

Теперь разберёмся со скачанным файлом binutils. Если путь к скачанному файлу

/download/binutils-2.18.tar.gz то укажем

Скрипт будет автоматически соберёт это в

/download/binutils-2.18.tar.gz. Остальные переменные определяют какие целевые платформы мы имеем. По умолчанию их довольно много, поэтому компиляция может занять много времени (часы на слабых машинах). Для кросс-компиляции для Windows вам потребуется только

и закомментировать все остальные:

Затем запустите скрипт:

Скрипт создаст поддиректорию ‘logs’ с соответствующим содержимым. В случае чего, начните поиски оттуда.

Заметьте что для некоторых платформ (Linux,FreeBSD, win32) утилиты доступны в скомпилированном виде. Смотрите ftp://freepascal.stack.nl/pub/fpc/contrib/cross/

Кроссплатформенная сборка FPC

В рекозитории fpcbuild существует скрипт для сборки fpc под все поддерживаемые целевые платформы: install/cross/buildcrosssnapshot Создайте копию скрипта

Исправьте переменные в начале нового скрипта.

Вам потребуется изменить всего лишь CROSSTOOLSROOT, FPCCVS, DESTDIR, TARGETS_OS и TARGETS_CPU. Например:

Затем запустите скрипт:

После этого вы получите кросс-компилированные модули в

Конфигурирование вашего fpc.cfg

Откройте с правами рута /etc/fpc.cfg или создайте копию /etc/fpc.cfg to

/fpc.cfg и отредактируйте этот файл. Найдите в файле пути поиска модулей.

Примечание: В более старых версиях FPC вместо $fpcversion и $fpctarget использовались $version и $target.

Замените их специальными путями для других платформ. Например, для linux и кросс-компилированной win32:

Читайте также:  Aad broker plugin windows 10 что это

Выполните: тестирование и устранение неполадок.

Кросс-компиляция LCL и компонентов lazarus

В коммандной строке:

Таким образом всё скомпилируется для win32 (включая IDE, что необязательно, но это сокращает объём манипуляций).

Или в IDE Сервис->Параметры сборки: отметим LCL, Synedit, Codetools, Регистрация пакетов и Интерфейс IDE как Очистить+Собрать, установми в поле Библиотека виджетов LCL значение win32/win64, а Целевая ОС — win32. Затем нажмём ‘Собрать’. Ваши файлы .ppu/.o скомпилированные для linux не будут перезаписаны и вам не нужно будет перекомпилировать их каждый раз, т.к. в рабочей папке будут созданы специальные директории для других целевых систем.

Коросс-компиляция проекта

Выберите Проект->Параметры проекта->Параметры компилятора->Генерация кода Целевая ОС=’win32′ и Проект->Параметры проекта->Параметры компилятора->Пути Библиотека виджетов LCL=’win32′. Вот и всё. При следующей компиляции будет создан исполняемый файл win32. IDE произведёт поиск утилит win32, поэтому компилятор будет работать с rtl для win32 вместо rtl для linux. Когда вы откроете другой проект или закроете текущий и откроете его вновь IDE автоматически установит настройки.

Подсказки по кросс-компиляции и Lazarus

Если вы создаете приложение/пакет для различных целевых ОС, вам необходимо действовать следующим образом: устранить баги, скомпилировать и протестировать приложение под linux, затем скомпилировать и протестировать его под win32, .. . Потому что обычно вы перезаписываете ваши .ppu файлы, и вам придётся перекомпилировать всё, каждый раз когда вы переключаете захотите изменить целевую ОС. Но это не обязательно. Lazarus поддреживает макросы.

Пример 1: Кросс-компиляция проекта для linux и win32.

Установите значение Проект-> Параметры компилятора->Пути->Каталог вывода модулей = $(TargetOS). Этот макрос будет заменён названием целевой ОС в нижнем регистре (например ‘linux’ для Linux, ‘win32’ для Win32). Каталог вывода модулей находится в директории вашего проекта (директории где расположен файл .lpi). Создайте директории с именами ‘linux’ и ‘win32’ в директории вашего проекта. Когда вы кликните на кнопке ‘Показать параметры’ в самом низу окна Параметры проекта, вы увидите -FElinux/ или -FEwin32/. Эта опция сообщает компилятору куда записать создаваемые файлы (файлы .ppu/.o).

Пример 2: Кросс-компиляция проекта для различных платформ и наборов виджетов.

Укажите Каталог вывода модулей следующим образом $(TargetCPU)/$(TargetOS)/$(LCLWidgetType) и создайте поддиректории для всех целей. Этот путь также используется LCL.

То же самое можно проделать и для пакетов.

Кросс-компиляция и пакеты Lazarus

Пакеты Lazarus не ограничены библиотеками. Они могут быть использованы для компиляции практически чего угодно. И IDE автоматически перекомпилирует их при необходимости. Пакеты могут наследовать опции компилятора. Например: проект, использующий пакет, наследует каталог вывода пакета. Другими словами: каталог вывода пакета добавляется в пути поиска модулей проекта. Посмотрите в IDE: Проект->Параметры проекта->Параметры компилятора->Унаследованные.

Наследование срабатывает единажды. Но существуют исключения: Целевая платформа (ОС и CPU) проекта переопределяет цель для всех используемых пакетов. Это значит, если вы укажете Целевую ОС в проекте = ‘win32’ и скомпилируете проект, IDE выполнит проверку на предмет необходимости перекомпиляции пакетов для Целевой ОС.

Пакет А имеет директорию вывода: lib/$(TargetOS) Проект использует А.

    Проект собирается для linux. IDE компилирует А для linux в

/lib/linux/, затем компилирует проект для linux.
Проект собирается для win32. IDE компилирует А для win32 в

/lib/win32/, затем компилирует проект для win32.

  • Проект снова собирается для linux. IDE проверяет, существует ли А для linux. Затем компилирует проект для linux.
  • Таким образом, использование макросов экономит много времени.

    Для Unix (в общих чертах)

    Опция -XLA используется для изменения зависимостей библиотек определённых в модулях. Формат -XLAold=new изменяет link-опцию ld -l

      на -l .

    Опция -XR (recent trunk) может быть использована для указания корня Целевой ОС. Она используется для:

    • добавления префикса к указанным по-умолчанию путям библиотек, в прошлом вы использовали -Xd и эти пути вручную. Например для i386-linux

    вместо следования в /lib, /usr/lib, и /usr/X11R6/lib к ld, будет следовать в /lib, /usr/lib, и /usr/X11R6/lib к ld.

    • определение местоположения библиотек С (linux-версий): glibc или uclibc. Например для uclibc будет принята попытка поиска по пути ‘ /lib/ld-uClibc.so.0’

    Для Linux под Win32

    Это просто, есть некоторая информация в buildfaq

    FreeBSD для sparc

    Я пытался кросс-компилировать из х86 для Sparc Solaris 9. Несмотря на то что результат не работал должным образом привожу мою командную строку:

    в компилятор / выполнить:

    /src/sollib директория которая содержит:

    • набор файлов .o из /usr/local/gcc-3.3-32bit/lib/gcc-lib/sparc-sun-solaris/3.3
    • libgcc.a из /usr/local/gcc-3.3-32bit/lib/gcc-lib/sparc-sun-solaris/3.3
    • набор файлов lib*.so из /usr/lib: libaio.so libmd5.so libc.so libelf.so librt.so libdl.so libm.so

    Иллюстрация проблемы при компиляции:

    Я подозреваю что ошибся с выбранными .o файлами.

    Для Mac OS X

    Авторы

    Эта страница была конвертирована из epikwiki version.

    Источник

    Оцените статью