Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Lazarus, Free Pascal, CodeTyphon
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.07.2024, 12:05   #1
hexor_boo
Разъяснятор
Форумчанин
 
Аватар для hexor_boo
 
Регистрация: 21.04.2022
Сообщений: 142
Вопрос Debian 12 (i386) + Lazarus 3.4 = ошибки линковщика

Делал так:
Код:
### 1) Подготовительная часть - установка зависимостей
sudo apt update

sudo apt install build-essential libgtk-3-dev libgdk-pixbuf2.0-dev libpango1.0-dev libcairo2-dev libgdk-pixbuf2.0-dev libatk1.0-dev libx11-dev libxft-dev libxext-dev libxrandr-dev libxcursor-dev libxinerama-dev

### 2) Ставим компилятор Free Pascal
tar -xvf fpc-3.2.2.i386-linux.tar

cd fpc-3.2.2.i386-linux

sudo ./install.sh

### 3) Возвращаемся обратно в директорию загрузок. Там лежат файлы fpc-laz_3.2.2-210709_i386.deb fpc-src_3.2.2-210709_i386.deb lazarus-project_3.4.0-0_i386.deb
cd ..

### 4) Ставим эти файлы
dpkg -i *.deb

apt-get install -f
После этого запускаем Lazarus и пробуем запустить проект с пустой формой. Линковщик вываливает ошибки:

Warning: linker: /usr/bin/ld: /usr/lib/fpc/3.2.2/units/i386-linux/rtl/si_c21.o: в функции «SI_C21_$$__FPC_LIBC21_START»:

Error: si_c21.pp:(.text.n_si_c21_$$__fpc_l ibc21_start+0x27): неопределённая ссылка на «__libc_csu_fini»

Warning: linker: /usr/bin/ld: si_c21.pp:(.text.n_si_c21_$$__fpc_l ibc21_start+0x2c): неопределённая ссылка на «__libc_csu_init»

project1.lpr(24,1) Error: Error while linking

Именно такую же проблему обсуждали здесь

Как я понял: из какой-то библиотеки убрали 2 функции. А Lazarus к ним обращается в процессе линковки. Вариант - либо как-то извернуться и поставить старую библиотеку (а какую библиотеку и какую версию? и получается что люди с новой библиотекой будут собирать ошибки) либо что-то патчить где-то в Lazarus, чтобы он "забыл" выброшенные функции, но здесь вопрос - будут ли программы корректно работать у тех, у кого старая версия библиотеки из которой ещё не убрали эти функции? Я за то чтобы пропатчить и работать с учётом того, что все ставят свежие библиотеки. А что патчить и по каким оффсетам? Помогите, пожалуйста...

Последний раз редактировалось hexor_boo; 01.07.2024 в 18:35.
hexor_boo вне форума Ответить с цитированием
Старый 01.07.2024, 14:53   #2
hexor_boo
Разъяснятор
Форумчанин
 
Аватар для hexor_boo
 
Регистрация: 21.04.2022
Сообщений: 142
По умолчанию

Здесь похоже разбирается патч. только я не понимаю как его делать.

Вот:
Код:
-    .quad   __libc_csu_init
-    .quad   __libc_csu_fini
+    .quad   0
+    .quad   0

Последний раз редактировалось hexor_boo; 02.07.2024 в 12:57.
hexor_boo вне форума Ответить с цитированием
Старый 01.07.2024, 18:34   #3
hexor_boo
Разъяснятор
Форумчанин
 
Аватар для hexor_boo
 
Регистрация: 21.04.2022
Сообщений: 142
Восклицание Задача решена! Linux Debian 12 (i386) + Lazarus 3.4

Урааа!!! Победил!

Полная подробная инструкция как поставить Lazarus 3.4 на Debian 12:

0) Поставить через Synaptic пакет lazarus-2.2 (вместе с ним подтягивается fpc-3.2.2 с нужными файлами)
1) После успешной установки найти и скопировать в укромное место 2 файла: si_c21.o, si_c21.ppu (к посту прикрепляю архив с ними: si_c21.7z)
2) Снести через Synaptic все пакеты названия которых начинаются с lazarus*, fpc*, fp-*
3) Закрываем Synaptic
4) Кладём в 1 папочку 4 файла:
4.1) Берём отсюда в точности такой *.TAR-файл:
4.1.1) fpc-3.2.2.i386-linux.tar
4.2) Берём отсюда *.DEB-файлы:
4.2.1) fpc-laz_3.2.2-210709_i386.deb
4.2.2) fpc-src_3.2.2-210709_i386.deb
4.2.3) lazarus-project_3.4.0-0_i386.deb
5) Ввести команды:
Код:
sudo apt update

sudo apt install build-essential libgtk-3-dev libgdk-pixbuf2.0-dev libpango1.0-dev libcairo2-dev libgdk-pixbuf2.0-dev libatk1.0-dev libx11-dev libxft-dev libxext-dev libxrandr-dev libxcursor-dev libxinerama-dev

tar -xvf fpc-3.2.2.i386-linux.tar

cd fpc-3.2.2.i386-linux

sudo ./install.sh

cd ..

dpkg -i *.deb

apt-get install -f
6) Пройти в директорию /usr/lib/fpc/3.2.2/units/i386-linux/rtl/
7) Переименовать файлы:
7.1) si_c21.o в si_c21.o_old
7.2) si_c21.ppu в si_c21.ppu_old
8) Скопировать файлы si_c21.o и si_c21.ppu из архива si_c21.7z в директорию /usr/lib/fpc/3.2.2/units/i386-linux/rtl/
9) Запустить Lazarus и радоваться!
Вложения
Тип файла: 7z si_c21.7z (1.6 Кб, 5 просмотров)

Последний раз редактировалось hexor_boo; 02.07.2024 в 12:58.
hexor_boo вне форума Ответить с цитированием
Старый 01.07.2024, 18:56   #4
DeepFlake
Форумчанин
 
Регистрация: 16.05.2024
Сообщений: 188
По умолчанию

Цитата:
Здесь похоже разбрается патч. только я не понимаю как его делать.
весело

Последний раз редактировалось DeepFlake; 01.07.2024 в 18:59.
DeepFlake вне форума Ответить с цитированием
Старый 01.07.2024, 19:25   #5
hexor_boo
Разъяснятор
Форумчанин
 
Аватар для hexor_boo
 
Регистрация: 21.04.2022
Сообщений: 142
По умолчанию

Цитата:
Сообщение от DeepFlake Посмотреть сообщение
весело
Не то слово) Около 15 часов шаманил.
hexor_boo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка линковщика Anton_Jag Общие вопросы C/C++ 7 26.12.2018 22:17
i386 или AMD64 StudentMarat Операционные системы общие вопросы 1 27.09.2012 17:35
Здравствуйте, установил LAzarus, при нажатии на кнопку запуск, выдает эти ошибки Mr.Kenny Помощь студентам 0 14.06.2012 17:30
Ошибка линковщика darkblood0202 C++ Builder 2 23.04.2012 19:05
ZendOptimizer для FreeBSD 7.3 - i386 wordik PHP 3 01.12.2010 13:54