libc (точнее, glibc - с другими инкарнациями libc, вроде uclibc, все более благополучно, тьфу-тьфу) к настоящему времени превратился в такого монстра... У меня складывается впечатление, что о всех тонкостях его устройства и внутренних взаимосвязях знают от силы человек пять в мире.
Насколько можно понять из чтения комментариев к багрепортам:
1) FPC что-то проверяет в ELF interpreter (как оно правильно переводится?), который /lib/ld-linux.so.2. При кросскомпиляции, скорее всего, он этого не делает.
2) Линкер (ld) может быть заточен под конкретную систему и подключать какие-то одному ему известные модули. То есть, работать совсем не так, как линкер из binutils, используемый при кросскомпиляции.
3) Наличие нескольких незакрытых багрепортов говорит о том, что оно глючит даже при компиляции в "родном" окружении. Например, у меня на slackware файл /lib/libc.so является скриптом, и до тех пор, пока его не сделаешь симлинком на /lib/libc.so.6, ни одна программа на Free Pascal с libc не собирается в принципе. А после того, как сделаешь симлинком, невозможно ничего собрать уже с помощью gcc.
Чего уж тут о кросскомпиляции говорить...
Добавлено спустя 3 минуты 28 секунд:
...точнее, надо сказать, что, пока речь не заходит о libc, кросскомпиляция работает. Т.е. сам FPC и простые программы на нем собираются без проблем.
Кросскомпиляция из win32 для linux и sysutils
Модератор: Модераторы
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
- Иван Шихалев
- энтузиаст
- Сообщения: 1138
- Зарегистрирован: 15.05.2006 11:26:13
- Откуда: Екатеринбург
- Контактная информация:
Sergei I. Gorelkin писал(а):...точнее, надо сказать, что, пока речь не заходит о libc, кросскомпиляция работает. Т.е. сам FPC и простые программы на нем собираются без проблем.
А что не собирается? Простенький примерчик, проверить хочу... (Да, у меня /usr/lib/libc.so — ld-скрипт).
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
Да все, что так или иначе использует libc, начиная с любого многопоточного приложения (пример в Lazarus - examples/multithreading/criticalsectionexample1.lpi) и заканчивая самим Lazarus.
- Иван Шихалев
- энтузиаст
- Сообщения: 1138
- Зарегистрирован: 15.05.2006 11:26:13
- Откуда: Екатеринбург
- Контактная информация:
Сам Lazarus у меня прекрасно собирается и работает без изменений libc.so...
- Attid
- долгожитель
- Сообщения: 2589
- Зарегистрирован: 27.10.2006 17:29:15
- Откуда: 44°32′23.63″N 41°2′25.2″E
- Контактная информация:
поддерживаю. у меня это тоже скрипт. и многопоточные собираются. может в скрипте дело ?
вот мой :
вот мой :
Код: Выделить всё
/* GNU ld script
Use the shared library, but some functions are only in
the static library, so try that secondarily. */
OUTPUT_FORMAT(elf32-i386)
GROUP ( /lib/libc.so.6 /usr/lib/libc_nonshared.a AS_NEEDED ( /lib/ld-linux.so.2 ) )
- Иван Шихалев
- энтузиаст
- Сообщения: 1138
- Зарегистрирован: 15.05.2006 11:26:13
- Откуда: Екатеринбург
- Контактная информация:
Аналогично:
Код: Выделить всё
/* GNU ld script
Use the shared library, but some functions are only in
the static library, so try that secondarily. */
OUTPUT_FORMAT(elf64-x86-64)
GROUP ( /lib64/libc.so.6 /usr/lib64/libc_nonshared.a AS_NEEDED ( /lib64/ld-linux-x86-64.so.2 ) )- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
И у меня скрипт такой же (как у Attid, поскольку i386). Самое интересное, сейчас попробовал еще раз - Lazarus собрался на ура. Видать, что-то обновилось... Рабочий проект не собрался по совершенно другой причине.
Вообще, я наверное зря привел себя в пример. Багрепорты (12400, 14128) были не о том.
Вообще, я наверное зря привел себя в пример. Багрепорты (12400, 14128) были не о том.
