Давно безуспешно бьюсь, чтобы поставить последний релиз компилятора и Лазаря на Линукс. Стабильный релиз на момент написания правки заметки (fpc 3.0.4 и Lazarus 2.0.8) поставить не составило труда: качаются и ставятся отсюда (для i386/amd64) три пакета соответственно fpc-src_3.0.4-1_i386.deb/fpc-src_3.0.4-2_amd64.deb (исходники компилятора), fpc-laz_3.0.4-1_i386.deb/fpc-laz_3.0.4-1_amd64.deb(бинарники компилятора и утилиты) и lazarus-project_2.0.8-0_i386.deb/lazarus-project_2.0.8-0_amd64.deb (сам Lazarus), и все устанавливается и работает!
А вот с установкой транков приходится повозиться. Чтение мануала тоже не принесло пользы: буржуйский текст воспринимается тяжело o_O.
Однако, охота пуще неволи. Потому я опять взялся за старое. Поставил в виртуалке свежий Дебиан с диска и приступил (за основу взят материал отсюда). Выражаю признательность за помощь и множество полезных советов Алексею Лагунову aka alexs (он же автор порта под Lazarus известного набора компонентов rxlib)
Update: с недавнего времени появилась удобная утилита fpcupdeluxe, которая позволяет легко и непринужденно получать любую версию компилятора и Лазаруса любой конфигурации, в т.ч. и с кросскомпиляцией.
1. Установка необходимых библиотек
ставим следующие пакеты (очередность установки желательно соблюсти)
- x11proto-print-dev (в стандартной поставке отсутствует, скачать можно отсюда)
- build-essential (включает в себя пакеты: binutils, dpkg-dev, fakeroot, g++, gcc, libalgorithm-diff-perl, libalgorithm-diff-xs-perl, libalgorithm-merge-perl, libc-dev-bin, libc6-dev, libdpkg-perl, libfile-fcntllock-perl, libitm1, libstdc++-dev, linux-libc-dev, make, manpages-dev)
- libx11-dev
- libxp6
- libgdk-pixbuf2.0-dev
- libpango1.0-dev
- libgtk2.0-dev
- gdb
- subversion (svn-клиент)
- libxp-dev
В терминале:
качаем недостающий пакет x11proto-print-dev
$ wget http://ftp.ru.debian.org/debian/pool/main/x/x11proto-print/x11proto-print-dev_1.0.5-2_all.deb
ставим его
$ sudo dpkg -i x11proto-print-dev_1.0.5-2_all.deb
ставим остальные пакеты скопом (одной строкой)
$ sudo apt-get install build-essential libx11-dev libxp6 libxp6-dbg libgdk-pixbuf2.0-dev libpango1.0-dev libgtk2.0-dev libxp-dev gdb
примечание:
1. пакет с отладчиком gdb у меня почему-то не встал, пришлось ставить его отдельно.
2. если пакеты не ставятся через командную строку, что можно это сделать посредством менеджера пакетов Synaptic, вызвав его в терминале
# gksudo synaptic
3. на Debian 9 из установки следует исключить пакеты libxp6, libxp6-dbg и libxp-dev, при этом добавить пакет libgl1-mesa-dev (иначе после установки некоторых компонент, использующих библиотеку LibGL.so, Lazarus при пересборке выдает невнятную ошибку компиляции). Таким образом, на Debian 9 установке необходимых пакетов будет выглядеть примерно так:
$ sudo apt-get install build-essential libx11-dev libgdk-pixbuf2.0-dev libpango1.0-dev libgtk2.0-dev gdb libgl1-mesa-dev
2. Установка стабильной версии компилятора (для i386/amd64)
качаем сорцы (на момент последней правки статьи текущим стабильным релизом компилятора была версия 3.2.0, но по прошествии времени версии обновляются, поэтому актуальную версию компилятора и его сорцов всегда смотрите здесь(для i386) или здесь (для amd64))
для i386
$ wget https://sourceforge.net/projects/lazarus/files/Lazarus%20Linux%20i386%20DEB/Lazarus%202.0.8/fpc-src_3.0.4-1_i386.deb
и ставим его
$ sudo dpkg -i fpc-src_3.0.4-1_i386.deb
затем качаем сам компилятор
$ wget https://sourceforge.net/projects/lazarus/files/Lazarus%20Linux%20i386%20DEB/Lazarus%202.0.8/fpc-laz_3.0.4-1_i386.deb
ставим и его
# sudo dpkg -i fpc-laz_3.0.4-1_i386.deb
соответственно для amd64
$ wget https://sourceforge.net/projects/lazarus/files/Lazarus%20Linux%20amd64%20DEB/Lazarus%202.0.8/fpc-src_3.0.4-2_amd64.deb
$ sudo dpkg -i fpc-src_3.0.4-2_amd64.deb
$ wget https://sourceforge.net/projects/lazarus/files/Lazarus%20Linux%20amd64%20DEB/Lazarus%202.0.8/fpc-laz_3.0.4-1_amd64.deb
$ sudo dpkg -i fpc-laz_3.0.4-1_amd64.deb
Получаем в результате такое сообщение в терминале
Running on linux
Write permission in /etc.
Writing sample configuration file to /etc/fpc.cfg
Writing sample configuration file to /usr/lib/fpc/3.0.4/ide/text/fp.cfg
Writing sample configuration file to /usr/lib/fpc/3.0.4/ide/text/fp.ini
Writing sample configuration file to /etc/fppkg.cfg
Writing sample configuration file to /etc/fppkg/default
Update(4.12.2017): если стабильная версия компилятора уже вышла, а окончательного релиза Lazarus'a до сих пор нет (а значит, нет и deb-пакетов), то можно скачать tar-архив отсюда, распаковать его в любую папку и запустить находящийся там install.sh. Это будет выглядеть примерно так (я скачал fpc 3.0.4 х32)
leyba@deb9:~/Downloads/fpc-3.0.4.i386-linux$ sudo ./install.sh
This shell script will attempt to install the Free Pascal Compiler
version 3.0.4 with the items you select
Install prefix (/usr or /usr/local) [/usr] :
Можно установить его локально, можно системно (в квадратных скобках умолчательное значение). Жмем "Enter"
Install prefix (/usr or /usr/local) [/usr] :
Installing compiler and RTL for i386-linux...
Installing rtl packages...
Installing rtl-console
<skiped>
Installing unicode
Install Textmode IDE (Y/n) ?
Отвечаем Y(Yes) на вопросе об установке справки, демок и т.д. В конце инсталлятор выдаст
Running on linux
Write permission in /etc.
Writing sample configuration file to /etc/fpc.cfg
Saved old "fpc.cfg" to "fpc.bak"
Writing sample configuration file to /usr/lib/fpc/3.0.4/ide/text/fp.cfg
Writing sample configuration file to /usr/lib/fpc/3.0.4/ide/text/fp.ini
Writing sample configuration file to /etc/fppkg.cfg
Saved old "fppkg.cfg" to "fppkg.bak"
Writing sample configuration file to /etc/fppkg/default
Saved old "default" to "default.bak"
End of installation.
Теперь можно переходить к установке транков (не забывайте корректировать в командной строке параметры соответственно версии компилятора).
3. Установка последних (транковых) версий fpc и lazarus.
Чтобы не искать их по диску, складываем все в одну папку (например development) в домашней директории:
создаем ее
$ mkdir ~/development
переходим в нее
$ cd development
ставим svn-клиента
$ sudo apt-get install subversion
Update (09.03.2018): под никсы появился GUI-шный вариант svn-клиента RabbitVCS. С его обзором можно познакомиться здесь.
качаем последний транк fpc в папку fpc_trunk
$ svn co http://svn.freepascal.org/svn/fpc/trunk/ fpc_trunk
и транк Лазаря в папку lazarus_trunk
$ svn co http://svn.freepascal.org/svn/lazarus/trunk lazarus_trunk
Update1: если нужна ревизия определенного номера компилятора или лазаруса, то можно скачать только ее. Например:
$ svn co -r 37700 http://svn.freepascal.org/svn/fpc/trunk/ fpc_r37700
Компилятор с номером ревизии 37700 будет закачан в папку fpc_r37700. Аналогично для Лазаруса.
Update2: узнать текущую версию транка (fpc или Лазаруса) можно так
$ svn info http://svn.freepascal.org/svn/fpc/trunk/
Также легко получить помощь по опциям (# svn help) и ключам команд (# svn help <команда>)
Update3: последние снапшоты транка Лазаруса всегда можно скачать здесь. А потом распаковать в папку lazarus_trunk. Особенно это актуально для тех, у кого ограничен интернет-траффик. Такие сборки "весят" менее 100 Мб.
Update4 (важный!!!): на момент последней правки статьи статьи текущим транком fpc была версия 3.3.1, а стабильной - версия 3.0.4. Поэтому ниже следующий код справедлив только для этих версий. Если версии их поменяются, необходимо внести коррективы в используемые команды. Иначе вы получите ошибки компиляции. |
Компилируем и устанавливаем новый fcp: переходим в каталог с новым компилятором, удаляем ссылки на старый компилятор, собираем и ставим новый компилятор
$ cd fpc_trunk
чистим "старые" откомпилированные ресурсы (если транк fpc апдейтится. Кстати, про эту команду и ее опции неплохо написано здесь)
$ make clean
если устанавливаем новый транк компилятора взамен предыдущего, лучше предусмотрительно удалить его сорцы
$ sudo rm -Rfv /usr/lib/fpc/3.3.1
и удалить симлинк от предыдущей установки в папке с бинарниками
для i386
$ sudo rm -Rfv /usr/bin/ppc386
для amd64
$ sudo rm -Rfv /usr/bin/ppcx64
для i386
собираем сорцы транка (не забываем про номер актуальной версии, которую мы теперь скачали, и меняем циферки по мере необходимости), используя компилятор стабильной версии (который мы установили ранее)
$ make all OPT='-gl' PP=/usr/lib/fpc/3.0.4/ppc386 OVERRIDEVERSIONCHECK=1
ставим новый компилятор (установится сюда /usr/lib/fpc/3.3.1 - версия транка может меняться) с использованием ресурсов готового компилятора 3.0.4
$ sudo make install INSTALL_PREFIX=/usr PP=/usr/lib/fpc/3.0.4/ppc386 OVERRIDEVERSIONCHECK=1
добавляем симлинк в папке с бинарниками на транковый компилятор (Лазарус будет искать его именно там)
$ sudo ln -sf /usr/lib/fpc/3.3.1/ppc386 /usr/bin/ppc386
соответственно для amd64
$ make all OPT='-gl' PP=/usr/lib/fpc/3.0.4/ppcx64 OVERRIDEVERSIONCHECK=1
$ sudo make install INSTALL_PREFIX=/usr PP=/usr/lib/fpc/3.0.4/ppcx64 OVERRIDEVERSIONCHECK=1
$ sudo ln -sf /usr/lib/fpc/3.3.1/ppcx64 /usr/bin/ppcx64
"перегоняем" сорцы транка из домашней папки в системную (все сорцы будут здесь /usr/share/src/fpc-3.3.1/fpc)
Update 5: если компилятор переустанавливается, то эту папку необходимо сначала удалить
$ sudo rm -Rfv /usr/share/src/fpc-3.3.1/fpc/
$ sudo make install sourceinstall PREFIX=/usr
задаем симлинк для Лазаруса, где ему искать сорцы компилятора (для компиляции собственных ресурсов)
$ sudo ln -sf /usr/share/src/fpc-3.3.1/fpc /usr/share/fpcsrc
переопределяем конфигурационный файл с /etc/fpc.cgf на /usr/lib/fpc/3.3.1/samplecfg
$ /usr/lib/fpc/3.3.1/samplecfg /usr/lib/fpc/3.0.4 /etc
Update 6: строго говоря, сорцы можно оставить в папке со скачанной ревизией fpc (т.е. не применять команду sudo make install sourceinstall PREFIX=/usr). Необходимо лишь будет поправить пути в симлинке для Лазаря и конфига с
usr/share/src/fpc-3.3.1/fpc на ~/development/fpc_trunk/ соответственно
для для i386
все то же самое, только при компиляции бинарников указывается ppc386
Компилируем и устанавливаем новый Lazarus: переходим в каталог с транковым Лазарем, собираем и устанавливаем его
$ cd ~/development/lazarus_trunk
$ make clean (только, если ранее установленный каталог был обновлен)
$ make
$ make bigide
Update 7: я предпочитаю сам выбирать, где среда будет хранить свои настройки. Для этого достаточно прибегнуть к этому способу.
Update 8: чтобы ускорить процесс, описанный по ссылке выше создадим программно конфигурационный файл Лазаря:
$ echo '--primary-config-path=~/development/lazarus_trunk/_config' > lazarus.cfg
и папку для настроек среды:
$ mkdir ~/development/lazarus_trunk/_config
После окончания сборки идем в папку с транком лазаруса и запускаем startlazarus
4. "Доработка напильником".
Update: справедливости ради отмечу, что написанное ниже уже не актуально для транков Лазаруса с версии 1.9
Но на этом еще не все, что поделаешь - законы жанра не позволяют ;-). После запуска среды мы можем увидеть в редакторе сообщений следующее:
lazarus.pp(142,1) Warning: "crti.o" not found, this will probably cause a linking failure
lazarus.pp(142,1) Warning: "crtn.o" not found, this will probably cause a linking failure
Это значит, что среда не видит объектные файлы пакета gcc, а значит теряется возможность кросскомпиляции.
Тогда ищем пакеты здесь: /usr/lib.
У меня они нашлись здесь: /usr/lib/i386-linux-gnu
Теперь выясняем, в чем дело. Открываем конфигурационный файл нашей IDE /usr/lib/fpc/3.1.1/samplecfg и обращаем внимание на текст (поскольку мы сидим под учеткой без root-прав, т.е мы как раз "No write premission in $sysdir")
# Detect if we have write permission in sysdir.
if [ -w "$sysdir" ] ; then
echo Write permission in $sysdir.
fpccfgfile="$sysdir"/fpc.cfg
fppkgfile="$sysdir"/fppkg.cfg
defaultfile="$sysdir"/fppkg/default
compilerconfigdir="-d CompilerConfigDir=$sysdir/fppkg"
else
echo No write premission in $sysdir.
fpccfgfile="$HOME"/.fpc.cfg
fppkgfile="$HOME"/.config/fppkg.cfg
defaultfile="$HOME"/.fppkg/config/default
fi
#
Находим этот самый .fpc.cfg в домашней директории, открываем и видим (напомню, что у меня Дебиан i386, т.е. 32-разрядный):
# path to the gcclib
#ifdef cpui386
-Fl/usr/lib/gcc/i486-linux-gnu/4.9
#endif
#ifdef cpux86_64
-Fl/usr/lib/gcc/i486-linux-gnu/4.9
#endif
Непорядок! Добавим к выделенной строке через двоеточие еще строчку, чтобы компилятор искал необходимые библиотеки и там. Должно получиться так:
#ifdef cpui386
-Fl/usr/lib/gcc/i486-linux-gnu/4.9:/usr/lib/i386-linux-gnu
Сохраняем файл и запускаем Лазарус. Теперь можно его пересобрать, выше описанную ошибку мы не получим.
Примечание: если в системе установлено неск. конфигурационных файлов (напр, "мусор" после ранее установленных, но потом удаленных версий fpc), то "текущий" (т.е. тот, который используется под вашей учеткой) можно найти командой:
# fpc -vt bogus
В результате будет показано из какого файла компилятор ищет пути к бибилиотекам, а заодно будут проверены эти самые пути на корректность. В терминале будет выведено что-то типа (вывод я подсократил за скобками <skiped>, и да, <user> - это имя вашей учетки):
Configfile search: /home/<user>/.fpc.cfg
Reading options from file /home/<user>/.fpc.cfg
Path "./.fppkg/lib/fpc/3.1.1/units/i386-linux/*/" not found
Path "/usr/lib/fpc/3.1.1/lib/i386-linux/" not found
Free Pascal Compiler version 3.1.1 [2016/07/12] for i386
Copyright (c) 1993-2014 by Florian Klaempfl and others
Searching file /lib/ld-linux.so.2... found
Path "/usr/X11R6/lib/" not found
Compiler: /usr/lib/fpc/3.1.1/ppc386
Target OS: Linux for i386
Using executable path: /usr/lib/fpc/3.1.1/
Using unit path: /usr/lib/fpc/3.1.1/units/i386-linux/httpd22/
<skiped>
Using object path: /usr/lib/fpc/3.1.1/
Compiling bogus
Searching file bogus... not found
Fatal: Can not open file "bogus"
Fatal: Compilation aborted
Error: /usr/bin/ppc386 returned an error exitcode
Так что, заодно можно проверить корректность других путей и устранить потенциальные косяки.
Пока вроде все...
|