LINUX.ORG.RU

Собрать glibc с поддержкой x32 abi в gentoo

 , , ,


0

1

Как сделать сабж?
Мне нужно добавить возможность сборки x32 пакетов в системе.
Несмотря на введённый полный мультилиб, ABI_X86 у glibc нету.
Пробовал переключать профиль - но такой вариант меня не устраивает - x32 становится для пакетов abi по умолчанию (Переезд на другой профиль и обратно прошёл относительно гладко).
Мне же нужно лишь чтобы abi_x86_x32 стал доступен как дополнительный (как в случае с abi_x86_32)
Полагаю, надо внести небольшие изменения в профиль - чтобы включить сборку x32 у glibc и размаскировать этот флаг.
Подскажите куда копать и куда искать? P.S

Решение:

1. В make.conf

MULTILIB_ABIS="amd64 x86 x32"
2. в /etc/portage/profile/use.mask:
-abi_x86_x32
3. Пересобрать glibc

В процессе может потребоваться файл gnu/stubs-x32.h т.к он не генерируется автоматически:

/* This file is automatically generated.
   It defines a symbol `__stub_FUNCTION' for each function
   in the C library which is a stub, meaning it will fail
   every time called, usually setting errno to ENOSYS.  */

#ifdef _LIBC
 #error Applications may not define the macro _LIBC
#endif

#define __stub_bdflush
#define __stub_chflags
#define __stub_create_module
#define __stub_fattach
#define __stub_fchflags
#define __stub_fdetach
#define __stub_get_kernel_syms
#define __stub_getmsg
#define __stub_gtty
#define __stub_lchmod
#define __stub_nfsservctl
#define __stub_putmsg
#define __stub_query_module
#define __stub_revoke
#define __stub_setlogin
#define __stub_sigreturn
#define __stub_sstk
#define __stub_stty
#define __stub_uselib
4. Пересобрать gcc.

Всё, новый профиль доступен, можно собирать пакеты.

★★★★★

Последнее исправление: mittorn (всего исправлений: 1)

Если у glibc активирован флаг multilib, то собирается и 64 битная и 32 битная версии:

qlist sys-libs/glibc | grep libc\.so
/usr/lib32/libc.so
/usr/lib64/libc.so
/lib64/libc.so.6
/lib32/libc.so.6

kostik87 ★★★★★
()

Скачай подходящий стейж1 где уже это есть, распакуй его и в чруте пересобери у этого стейжа @system с ключиком -b. Получишь нужные пакеты, которые потом можно затащить в свою систему.

imul ★★★★★
()
Ответ на: комментарий от kostik87

Зачем?

На ~ сталкивался с неприятностями при сборке. Хотя, это было очень давно. Может быть сейчас уже не актуально.

Непонятно именно зачем тс флаг abi_x86_x32, если есть флаг multilib, который делает именно то, что ему нужно.

Это он сам лучше расскажет. Возможно он сам не знает точно что ему нужно.

imul ★★★★★
()
Ответ на: комментарий от anonymous

Ты кидаешь камень в мой огород, так вот я знаю чем отличается x32 от x86 (x86_32). Но признаю, ошибся, невнимательно прочитал суть темы.

kostik87 ★★★★★
()
Ответ на: комментарий от anonymous

Лiл. Спроси лучше у ТС зачем ему хочется x32abi в качестве мультилиба. Хотя я может быть не так понял фразу:

Мне же нужно лишь чтобы abi_x86_x32 стал доступен как дополнительный (как в случае с abi_x86_32)

imul ★★★★★
()
Ответ на: комментарий от kostik87

Аноним кинул камнем в меня. Я вот не понимаю зачем тс хочет abi_x86_x32 мультилиб. Что он там запускать собрался?

imul ★★★★★
()

Покопавшись в профилях нашёл приблизительно следуйщий выход (сейчас проверяю)
1. Думаю, на сборку glibc повлияет:
MULTILIB_ABIS=«amd64 x86 x32»
2. Размаскировать abi_x86_x32
3. Пересобрать glibc (доложить недостающий хедер из stage3 при необходимости)
4. использовать +abi_x86_x32
Т.к сборка долгая, пока не знаю, что выйдет. Надо проверять.

mittorn ★★★★★
() автор топика
Ответ на: комментарий от imul

Я хочу собирать abi_x86_x32 пакеты.
Ещё я хочу тестировать совместимость.
Но при этом оставить abi_x86_64 как основной системный.

mittorn ★★★★★
() автор топика
Ответ на: комментарий от imul

Почти. Все три. Места немного займёт, но это девелоперский комп и пусть лучше все 3 будут доступны.

mittorn ★★★★★
() автор топика
Ответ на: комментарий от imul

Это костыль. Хочу нативный мультилиб для этого использовать.

mittorn ★★★★★
() автор топика

Надо что-то придумать с libgcc:

/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/../../../../x86_64-pc-linux-gnu/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/libgcc.a when searching for -lgcc
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/../../../../x86_64-pc-linux-gnu/bin/ld: cannot find -lgcc
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/../../../../x86_64-pc-linux-gnu/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/libgcc_s.so when searching for -lgcc_s
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/../../../../x86_64-pc-linux-gnu/bin/ld: cannot find -lgcc_s
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/../../../../x86_64-pc-linux-gnu/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/../../../../lib64/libc.so when searching for -lc
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/../../../../x86_64-pc-linux-gnu/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/../../../../lib64/libc.a when searching for -lc
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/../../../../x86_64-pc-linux-gnu/bin/ld: skipping incompatible /usr/lib/../lib64/libc.so when searching for -lc
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/../../../../x86_64-pc-linux-gnu/bin/ld: skipping incompatible /usr/lib/../lib64/libc.a when searching for -lc
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/../../../../x86_64-pc-linux-gnu/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/../../../libc.so when searching for -lc
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/../../../../x86_64-pc-linux-gnu/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/../../../libc.a when searching for -lc
collect2: ошибка: выполнение ld завершилось с кодом возврата 1

mittorn ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.