Все о Linux. LinuxRSP.Ru

[an error occurred while processing this directive]

Cвежие новости Linux и BSD, анонсы статей и книг прямо в почтовый ящик!
Подписаться письмом


 Сегодняшние новости:

25 лет исполнилось ядру Linux

Релиз KDevelop 5.0

Oracle открывает код JDK9 для ARM

Выпущен Timewarrior 1.0.0

Релиз Android 7.0

Percona Memory Engine для MongoDB на базе WiredTiger

PowerShell открыт и доступен для Linux

Форк TrueCrypt: VeraCrypt 1.18

Релиз Snapcraft 2.14

Релиз Go 1.7

Стабильный выпуск рабочего стола Lumina

Вышла первая версия аналога OpenCV - DCV 0.1

Выпуск минималистичной программы для мониторинга jsonmon 3

В MIT разработали новый язык программирования

Первый релиз Qt5Gtk2

Godot 2.1 - новая версия открытого игрового движка

Свободная цифровая станция звукозаписи: Ardour 5.0

Обновление SkypeWeb Plugin for Pidgin

Вышла версия 3.0 Android File Transfer для Linux (и для OS X)

Программный аналог MIDI-контроллера для создания музыки: Launchpadd v1.3

Mozilla спонсирует поддержку Python 3.5 в PyPy

Ef 0.08 - программа для моделирования динамики заряженных частиц

Обновление текстового редактора TEA до версии 42.0.0

Релиз OpenOrienteering Mapper 0.6.4

Вышли Guix и GuixSD 0.11

Релиз Opera 39

Выпуск LibreOffice 5.2

В OpenSSH обнаружены и устранены некоторые уязвимости

Эмулятор FCEUX 2.2.3

Компания Билайн переходит на российскую СУБД с открытым исходным кодом Tarantool

Google

 Новые статьи :

Утилиты для восстановления потерянных данных в Linux

Лучшие файловые менеджеры для Android

20 лучших бесплатных книг о Linux

Как сгенерировать открытый/закрытый SSH-ключ в Linux

Grive - клиент Google Drive для Linux с открытым исходным кодом

Протокол IPv6: варианты подключения

Сервер из образа: DHCP + TFTP + Initrd + OpenVZ

Обзор веб-панелей управления хостингом

Приёмы работы с Vim

Nginx как Reverse Proxy для сайта, использующего SSL

Разработка модулей ядра Linux

Мониторинг нагрузки http-сервера Apache 2

Перевод комментариев к файлу конфигурации Squid

Решение проблем при использовании "1c предприятие" 8.2 в Linux

Advanced Bash-Scripting Guide Искусство программирования на языке сценариев командной оболочки







Rambler's Top100





 
 
previous | up | next

Устранение проблем компиляции в Borland Kylix 3 при glibc 2.3.2

Сердцев А.А. (mailto:stolia@mail.ru)

2004.03.16

Оригинал в TeX (+Makefile)

Аннотация:

В статье описывается как устранить проблемы компиляции в среде Borland Kylix 3 при glibc 2.3.2.

Проблема

Ошибки, возникающие при компиляции проектов в Kylix 3, связаны с тем, что он настроен на работу с библиотекой glibc версии 2.1.2. А сейчас, на дистрибутивах устанавливаются новые версии этой библиотеки, которые уже не имеют обратной совместимости со своими старыми версиями (по крайней мере могу утверждать про glibc 2.3.2). Главным различием между 2.1.2 и 2.3.2 является способ запуска программ, вернее передачи управления функции main (для этого при сборке программы прицепляется объектный файл crt1.o). В 2.3.2 для передачи управления используются так называемые функции init/fini, которые задаются линковщиком! А вот о них то, как раз, и не знает борландовский «связник».

Предлагается два пути решения:

  1. Настроить Kylix под пакет compat-glibc-6.2-2.1.3.2, под который Kylix и создавалась.

  2. Пропатчить Kylix для работы с glibc 2.3.

Оба способа выдуманы не мной, поэтому отправляю к оригиналам: первый -- http://www.linuxquestions.org/questions/archive/9/2003/08/3/42518, второй -- http://www.kylix-patch.de.vu/.

Советую применять второй способ для устранения проблемы, т.к. он не только подстраивает Kylix под glibc 2.3, что даёт больше возможностей программисту, но и исправляет некоторые баги.

Неважно какой вы способ выбрали, сперва нужно перебраться на ядро 2.4.21 или выше (как с ядрами из ветки 2.6 я не в курсе). Если этого не сделать происходит зависание Kylix при вызовах диалогов open/save (если это произошло, то нужно правильно убивать, иначе комп повиснет; убиение происходит по схеме -- от потомков к родителям). А при закрытии Kylix компьютер точно повиснет (и не важно каков ваш статус в системе и приоритетность выполнения задачи).

Решение. Способ N1

Итак, первый вариант:

  1. Установка compat-glibc 2.1. Именно эту версию и будем использовать для компиляции проектов Kylix. Подойдет пакет compat-glibc-6.2-2.1.3.2.rpm из Redhat 7.2, или, откуда я взял, compat-glibc-6.2-2.1.3.2.0.asp.i386.rpm из ASPLinux 7.2. Файлы пакета, после установки, должны быть в директории /usr/i386-glibc21-linux, так что они ни как не повлияют на работу gcc и на загрузку so-файлов.

  2. Установка Kylix 3:

    [root]$ sh setup.sh -m

    Далее идёт регистрация лицензии, если, конечно, она есть в наличии. Нет -- найди.

  3. Запусти Kylix и закрой все проекты (File->Close All). Это нужно для того, чтобы настроить опции по умолчанию.

    Затем, открой окно настройки опций (Project->Options), вкладку Directories/Conditionals и замени в Include path /usr/include на /usr/i386-glibc21-linux/include и в Library path /usr/lib на /usr/i386-glibc21-linux/lib

  4. Для того что бы заголовочные файлы Kylix ссылались на /usr/i386-glibc21-linux/include, а не на /usr/include нужно в директории K3_HOME/include подправить файлы _defs.h and defs.h следующим образом: заменить строки

    #define _STD_HEADER_(__a) </usr/include>

    на

    #define _STD_HEADER_(__a) </usr/i386-glibc21-linux/include>

  5. Проделанных шагов уже хватит, что бы собрать проект, но на некоторых системах при запуске скомпилированного приложения из IDE Kylix происходит зависание оболочки (как правило, эта проблема исчезает, когда переползаешь на новое ядро). Для решения этой проблемы при запуске Kylix нужно задать перременную LD_ASSUME_KERNEL=2.2.5:

    [user]$ export LD_ASSUME_KERNEL=2.2.5; startbcb

Вот и всё, что касается первого способа.

Решение. Способ N2

Второй способ очень прост. Просто, нужно зайти на http://www.kylix-patch.de.vu/ и скачать патчи. Там их несколько и все их желательно применить. Далее следуйте по инструкции установки, ничего сложного и ставятся они без проблем.

Главный патч, который нам нужен, обозван как k3fix.tar.gz. Но, при установке, он меняет карту символов. Для устранения этого неудобства просто удалите в домашней директории файл .Xmodmap:

[user]$ rm ~/.Xmodmap

Вот и всё, должно работать и прописывать переменною LD_ASSUME_KERNEL=2.2.5 не требуется. Пользуйтесь.

Решение. Резервный вариант

Есть еще и третий способ, который проделал я, путём проб и ошибок. Это я уже потом обнаружил второй способ, так что можно сказать, что сейчас он не актуален.

Мой способ является чем-то средним между первым и вторым -- используется библиотека glibc 2.3.2, но её нужно собирать, и, соответственно, установленная на системе glibc не используется. И для этого способа нужно собрать ядро выше 2.4.20. Немного опишу его, на тот случай, если патч не подойдёт для установленной glibc, например выйдет более новая версия glibc.

Лень писать всё (да кому это собственно надо), поэтому, повествую на идейном уровне. Главное это собрать glibc. Но прежде чем её компилять нужно немного подправить исходники: в configure добавить строку libc_cv_initfinit_array=no (строка 4830, проверка поддержки .preinit_array/.init_array/.fini_array), тем самым отказываемся от использования функций init/fini в компилируемой glibc, что, собственно, и не устраивало борландовский линковщик. Но у меня возникли дополнительные проблемы с этим же линковщиком -- он отказывался находить функцию _nl_archive_subfreeres, хотя она и была определена в готовом файле libc.a (чужая душа -- потёмки). Для решения этой проблемы я перенёс функцию _nl_archive_subfreeres из файла loacale/loadarchive.c в файл locale/setlocale.c (в loacale/loadarchive.c эту функцию закоментарил). Тогда всё удалось.

Далее идет сборка. Собирать glibc нужно как обычно, но директорию установки нужно указать иную, чем по умолчанию (опция --prefix, например, --prefix=/usr/local/glibc-2.3.2-for-kylix3) -- зачем нужны лишние проблемы. Затем идут шаги идентичные в способе N1 при настройки Kylix под нужную glibc (см. выше). Всё должно заработать.

Предложенный способ является тернистым, но то же имеет право на существование: Х_йня война -- главное манёвры.

.PS

Описанные мною действия восстановлены по памяти. Поэтому, может быть я что-то и упустил, но это возможно только в плане мелочей.

Надеюсь эта статья вам помогла. Удачи!

Сердцев А.А. (stolia@mail.ru)

Об этом документе ...

Устранение проблем компиляции в Borland Kylix 3 при glibc 2.3.2

This document was generated using the LaTeX2HTML translator Version 2002 (1.62)

Copyright © 1993, 1994, 1995, 1996, Nikos Drakos, Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999, Ross Moore, Mathematics Department, Macquarie University, Sydney.

The command line arguments were:
latex2html -split 0 compile-in-kylix3-on-asplinux9.tex

The translation was initiated by Anatoly A. Serdtcev on 2004-03-19


previous | up | next
      

Связь | О проекте LinuxRSP | Реклама | О Linux
© 1999-2024 LinuxRSP