LINUX.ORG.RU

GLIB - 2.0 32х и 64х битные версии на одной машине.


0

1

Доброго времени суток!

Проблема в следующем:
Есть 64х битная машина (сервер сборок), есть приложение которое тянет glib.
Необходимо собирать на этой машине две версии приложения 32х и 64х. Вопрос:
1) Возможна ли установка двух версий GLIB 32х и 64х битную.
2) Как это сделать, что прописать?

Приложение написано на QT, на машине установлена QT 64x и 32х версий.
Спасибо за помощь!

Возможно. В rpm-based дистрибутивах это всё уже решено из коробки. А в дебобунтах надо для этих целей собирать 32х битный chroot.

Reset ★★★★★
()

Устанавливаете glibc, либо с использованием пакетного менеджера, либо собираете самостоятельно собираете, и устанавливаете в отличную от / директорию, например make install install_root=/usr/local.

При сборке N-ого приложения можете подкорректировать specs файл gcc http://gcc.gnu.org/onlinedocs/gcc-4.6.1/gcc/Spec-Files.html, http://www.linuxfromscratch.org/lfs/view/stable/chapter05/adjusting.html, либо указывать в параметрах сборки dynamic linker. CC=«gcc -Wl,-dynamic-linker,/usr/local/lib/ld-linux.so.2»

Для изменения dynamic linker в бинарных файлах, можно использовать http://nixos.org/patchelf.html

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

Возможно. В rpm-based дистрибутивах это всё уже решено из коробки. А в дебобунтах надо для этих целей собирать 32х битный chroot.
Debian - multiarch. Ubuntu - multiarch (начиная с 11.10). -1 аргумент. Там у вас ещё что-нибудь в запасе осталось, или всё уже?

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

Еще раз для тех кто в танке — в пакет ia32-libs входят не все библиотеки, а пакет инородной архитектуры поставить в дебобунте невозможно без костылей.

Reset ★★★★★
()
Ответ на: комментарий от Reset
~$ sudo apt-get install libc6:amd64
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Уже установлена самая новая версия libc6:amd64.
обновлено 0, установлено 0 новых пакетов, для удаления отмечено 0 пакетов, и 0 пакетов не обновлено.
~$ sudo apt-get install libc6:i386
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Уже установлена самая новая версия libc6:i386.
обновлено 0, установлено 0 новых пакетов, для удаления отмечено 0 пакетов, и 0 пакетов не обновлено.

Одно слово - клоун.

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

А я ведь могу и проверить.

# apt-get install libavformat52:i386
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package libavformat52:i386
# apt-get install libc6:i386
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package libc6:i386
# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 11.04
Release:        11.04
Codename:       natty
Reset ★★★★★
()
Ответ на: комментарий от maloi

Ок, дома в vmware проверю. Но тот факт, что они это (возможно) сделали через 5 лет после rpm-based говорит сам за себя.

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

для кросс-компиляции. Что-то в федоровских вики какой-то изврат для этого описывается, может вы, как знаток rpm-based раскажете как это делать?

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

И что, SDK от всех вендоров есть в репах? Расскажите же мне, как это сделать в общем случае, без установки того, чего нет в репозиториях (подразумеваем что у используемого дистрибутива есть архитектуры и amd64 и ppc64)

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

SDK дает вендор, его в репах нет, естественно. В общем случае надо руками собирать toolchain и ставить его куда-нибудь в /opt/my-mega-arch-toolchain. Как это делать написано в различных источниках. В репах такого нет, ибо почти все rpm-based поддерживают только две самые распространенные архитектуры (x86_64 и x86).

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

>В общем случае надо руками собирать toolchain и ставить его куда-нибудь в /opt/my-mega-arch-toolchain.

В репах такого нет, ибо почти все rpm-based поддерживают только две самые распространенные архитектуры (x86_64 и x86).


Ну вот поэтому в rpm-based и сделали 5 лет назад наколеночное нерасширяемое поделие, а в deb-based решили, что лучше подумают подольше, но сделают гибче. А если бы Debian поддерживал две архитектуры - то сделать то же самое, что в rpm не составило бы труда - просто перепаковать все x86 пакеты и все.

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

А зачем перепаковывать? В rpm пакеты одинаковые, ничего не перепаковывается. И в rpm есть настройка отвечающая за совместимость архитектур. Поэтому сделать и расширить можно как угодно.

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

и куда совместимая ppc64 архитектура будет ставится в случае rpm? в libppc64? а если раньше она была несовместимой и ставилась в lib64 что делать с rpm-ками?

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

А как в дебобунте решили вопросы переезда из /lib/ в /lib/arch ? Вот точно также. Другой вопрос нужно ли это делать, если это решит только вопросы связанные с кросскомпиляцией, которая нужна 0.000001% пользователей?

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

Дело в том, что в RH этого не сделали и не собираются решать эти проблемы, а в debian я смогу перезагружаться из линуксового ядра во фревое и запускать там линуксовые бинарники через compat, например. Или поставить себе две версии ffmpeg - скомпиленные с поддержкой SSE и без нее. И всё это - не выдумывая новых директорий, куда это поставить и сумеет ли оно притянуть зависимости.

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

Кстати с linux/freebsd тоже не ясно. У тебя будет разделение в /lib по платформам, а в /bin всё будет лежать для одной платформы. Если ты во freebsd и сможешь подцепить такой /bin, то он засосет /lib/...linux..., а /lib/...freebsd... будет лежать балластом

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

в том-то и дело, что Debian предлагает решение, когда добавление новой платформы буквально ничего не стоит, и ставить можно любую платформу в любую, а значит можно просто выдумать новое название для платформы с sse, сделать локальный репозиторий с ней и ставить оттуда пакеты в дефолтный дебиан, в котором все скомпилено без sse.

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

«выдумать», «сделать» .... это считай что этого нет. к сожалению идиотизм с /lib/arch они пропихивают в lsb, поэтому и в rpm-based будет.

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

если этого нет, то только потому что никому это не нужно на данном этапе. когда кому-то захочется - сделают. в rpm-based за пять лет ничего вменяемого придумать не смогли, кроме разделения на /lib64 /lib (который есть сейчас в debian, только ни у кого нет желания доводить это до такого же маразма и завершенности, что в rpm-based), поэтому будут использовать то что придумали в deb-based (ну или у них наконец-то дойдут руки придумать что-то свое, что фанаты сразу же поддержат).

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

кроме разделения на /lib64 /lib (который есть сейчас в debian

ага, только /lib64 /lib в rpm-based реально работает, а в debian - нет

Reset ★★★★★
()
Ответ на: комментарий от RussianNeuroMancer
root@ubuntu:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu oneiric (development branch)
Release:        11.10
Codename:       oneiric
root@ubuntu:~# apt-get install libc6:i386
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package libc6:i386
root@ubuntu:~# apt-cache search ia32-libs
ia32-libs - ia32 shared libraries for use on amd64 and ia64 systems
# ^^^ на кой оно если у нас якобы полноценный multilib?

В общем, не работает в 11.10, что и требовалось доказать.

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

поставил 11.10, стал запускать команды и увидел это. вообще ничего не делал и не настраивал

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

Кстати какой нафиг багрепорт? Откуда я могу знать, что это не ожидаемое поведение? Отсутствие в мане слов про :arch и наличие пакета ia32-libs говорит само за себя. Ну а твоим словам доверять нельзя.

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

Кстати какой нафиг багрепорт? Откуда я могу знать, что это не ожидаемое поведение?
Из Release notes Oneiric...
> Отсутствие в мане слов про :arch
...оттуда же (сами найдёте?).
> наличие пакета ia32-libs говорит само за себя
Значит какой-нибудь там Skype или WINE от него всё ещё зависит.
> Ну а твоим словам доверять нельзя.
Какое мне дело до вашего мнения о моих словах?

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

В общем, не работает в 11.10, что и требовалось доказать.

это доказало только кривизну твоих рук:

$ apt-cache showpkg libavformat52:i386
Package: libavformat52:i386
Versions: 
4:0.6.2-1ubuntu1 (/var/lib/apt/lists/ua.archive.ubuntu.com_ubuntu_dists_oneiric_universe_binary-i386_Packages)
 Description Language: 
                 File: /var/lib/apt/lists/ua.archive.ubuntu.com_ubuntu_dists_oneiric_universe_binary-i386_Packages
                  MD5: bcb1dba14750f810ee29d115e1d34d74

^^^ на кой оно если у нас якобы полноценный multilib?

чтоб не ломать совместимость, multilib еще в разработке/тестировании

aho
()
Ответ на: комментарий от aho

это доказало только кривизну твоих рук:

Так что надо сделать чтобы так было? В дефолтовой установки такого у меня нет.

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

Я понял, у тебя дистрибутив i386. У меня на amd64 тоже работает суффикс amd64, а вот i386 не работает.

uname -a
Linux ubuntu 3.0.0-8-generic #11-Ubuntu SMP Fri Aug 12 20:23:58 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux

multiarch включить надо сначала, а потом обновить список пакетов

aho
()
Ответ на: комментарий от Reset

> как это сделать

написано в документации - я нашел буквально за 10 сек

и почему оно не включено по умолчанию?


потому-что «еще в разработке/тестировании»

aho
()
Ответ на: комментарий от aho

Еще несколько страниц флейма и, возможно, я пойму работоспособен multiarch в дебобунте или нет. В общем, вот с этим как бороться?

root@ubuntu:~# apt-get install libavformat52:i386
Reading package lists... Done
Building dependency tree
Reading state information... Done
Некоторые пакеты невозможно установить. Возможно, вы просите невозможного,
или же используете нестабильную версию дистрибутива, где запрошенные вами
пакеты ещё не созданы или были удалены из Incoming.
Следующая информация, возможно, поможет вам:

Пакеты, имеющие неудовлетворённые зависимости:
 libavformat52:i386 : Depends: libavcodec52:i386 (>= 4:0.6.2-1ubuntu1) но он не будет установлен или

                               libavcodec-extra-52:i386 (>= 4:0.6.2) но он не будет установлен
                      Depends: libavcodec52:i386 (< 4:0.6.2-99) но он не будет установлен или
                               libavcodec-extra-52:i386 (< 4:0.6.2-99) но он не будет установлен
                      Depends: libbz2-1.0:i386 но он не будет установлен
E: Unable to correct problems, you have held broken packages.
Reset ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.