Russian Qt Forum

Qt => Общие вопросы => Тема начата: vanessa от Апрель 20, 2011, 17:43



Название: кроскомпиляция i386 для amd64 и наоборот.
Отправлено: vanessa от Апрель 20, 2011, 17:43
Что-то гугль мне не очень помог в таком вопросе: что нужно чтоб на i386 системе собирать бинарники для amd64? интересует и зеркальная сборка - на amd64 для i386. система - Debian


Название: Re: кроскомпиляция i386 для amd64 и наоборот.
Отправлено: Fat-Zer от Апрель 20, 2011, 18:42
1-е - очень геморно (сам я не пробовал) и проще использовать нативную среду. Нужны соответствующие библиотеки и кросс-компилятор (хотя можно попробовать и обычный с ключом -m64)
2-е - также нужны библиотеки и компилятору задавать ключ -m32, хотя тут, опять же, проще или полноценной 32-х-битной chroot-средой воспользоваться или виртуалкой.


Название: Re: кроскомпиляция i386 для amd64 и наоборот.
Отправлено: vanessa от Апрель 20, 2011, 20:28
Я этот вопрос задал потому как сейчас на распутье: мигрировать на amd64 или нет? сдерживает миграцию тот прискорбный факт что иногда(часто) приходится работать на ноутбуке, который не умеет amd64....  ну а обратная сборка - чисто ради спортивного интереса....


Название: Re: кроскомпиляция i386 для amd64 и наоборот.
Отправлено: Fat-Zer от Апрель 20, 2011, 20:55
у меня тоже на основном x86_64, а на нетбуке x86... и я не вижу в чём может быть проблемма...


Название: Re: кроскомпиляция i386 для amd64 и наоборот.
Отправлено: vanessa от Апрель 20, 2011, 21:18
Расскажите как на нетбуке собирать программы для amd64? что для этого нужно ?


Название: Re: кроскомпиляция i386 для amd64 и наоборот.
Отправлено: Fat-Zer от Апрель 20, 2011, 21:32
Расскажите как на нетбуке собирать программы для amd64? что для этого нужно ?
о_О зачем?
я правда на основном компе собираю систему(gentoo) для нетбука, ибо на этом чуде этот процесс займёт века...


Название: Re: кроскомпиляция i386 для amd64 и наоборот.
Отправлено: vanessa от Апрель 20, 2011, 22:12
о_О зачем?
бивает езжу по командировкам и иногда приходится исправлять свои поделки. а поделки мои - это что-то типа ембедеда, только на обычних компах. Вот и хочется эти компы тоже перевести на amd64 но при этом не устанавливать туда средства сборки. соответственно надо будет собирать на х68 программы для x86_64


Название: Re: кроскомпиляция i386 для amd64 и наоборот.
Отправлено: Fat-Zer от Апрель 20, 2011, 22:35
эх... мне, благо, таким извращением заниматься не приходилось... но пилить надо в сторону кросс-компиляции...


Название: Re: кроскомпиляция i386 для amd64 и наоборот.
Отправлено: Пантер от Апрель 21, 2011, 07:31
Я так и не смог победить кросскомпиляцию из 64 для 32. :( Копай в сторону emerge crossdev. Если победишь - поделись.


Название: Re: кроскомпиляция i386 для amd64 и наоборот.
Отправлено: vanessa от Март 23, 2012, 00:14
подтиму тему: в свежем дебиане есть мультиарч суппорт - ставятся заголовки и библиотеки для кроскомпияции для цели amd64 на хоcте i386. добавление в .pro-файл строк
Код:
QMAKE_CXXFLAGS_RELEASE += -m64
QMAKE_LFLAGS_RELEASE += -m64
сделало возможным компиляцию cpp-файлов, но только компиляцию, на этапе линковки получаю ошибки
Код:
g++ -Wl,-O1 -m64 -o qttest64 main.o    -L/usr/lib -lQtGui -lQtCore -lpthread 
/usr/bin/ld: skipping incompatible /usr/lib/libQtGui.so when searching for -lQtGui
/usr/bin/ld: skipping incompatible /usr/lib/gcc/i486-linux-gnu/4.6/../../../libQtGui.so when searching for -lQtGui
/usr/bin/ld: skipping incompatible /usr/lib/libQtGui.so when searching for -lQtGui
/usr/bin/ld: cannot find -lQtGui
/usr/bin/ld: skipping incompatible /usr/lib/libQtCore.so when searching for -lQtCore
/usr/bin/ld: skipping incompatible /usr/lib/gcc/i486-linux-gnu/4.6/../../../libQtCore.so when searching for -lQtCore
/usr/bin/ld: skipping incompatible /usr/lib/libQtCore.so when searching for -lQtCore
/usr/bin/ld: cannot find -lQtCore
collect2: ld returned 1 exit status
make: *** [qttest64] Помилка 1
что вообщем-то нормально поскольку в /usr/lib у меня библиотеки для архитектуры i386. Есть мысль установить эти библиотеки из пакетов для amd64 но вот как бы их по-правильному установить, чтоб не сильно манипулировать файлами вручную и чтоб пакетный менеджер дебиана не затер родные для архитектуры библиотеки ?

еще сделал так, распаковал amd64 библиотеки Qt в /opt/lib64 из пакетов вручную, дописал в .pro-файл
Код:
QMAKE_LIBDIR_QT = /opt/lib64
команда линковки, генерируемая qmake теперь выглядит так
Код:
g++ -Wl,-O1 -m64 -o qttest64 main.o    -L/opt/lib64 -lQtGui -lQtCore -lpthread 
/usr/bin/ld: skipping incompatible /usr/lib/gcc/i486-linux-gnu/4.6/../../../libQtGui.so when searching for -lQtGui
/usr/bin/ld: skipping incompatible /usr/lib/libQtGui.so when searching for -lQtGui
/usr/bin/ld: cannot find -lQtGui
/usr/bin/ld: skipping incompatible /usr/lib/gcc/i486-linux-gnu/4.6/../../../libQtCore.so when searching for -lQtCore
/usr/bin/ld: skipping incompatible /usr/lib/libQtCore.so when searching for -lQtCore
/usr/bin/ld: cannot find -lQtCore
collect2: ld returned 1 exit status
make: *** [qttest64] Помилка 1
а почему оно все-равно исчет библиотеки в /usr/lib если параметр -L задан на совсем другой путь ?