Кросс-компиляция из под Linux x64 для Linux x32

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Кросс-компиляция из под Linux x64 для Linux x32

Сообщение Leonius_Bad » 08.08.2015 11:07:17

Здравствуйте.
Для осуществления описанного в заголовке темы применял инструкцию из вики:
http://wiki.lazarus.freepascal.org/Cros ... From_Linux

На моменте: sudo make all CPU_TARGET=i386 весь процесс прерывается с ошибкой:
Код: Выделить всё
ld: warning: ./link.res contains output sections; did you forget -T?
ld: cannot find -lpthread
ld: cannot find -ldl
ld: cannot find -lc
fppkg.pp(396,1) Error: Error while linking
fppkg.pp(396,1) Fatal: There were 1 errors compiling module, stopping
Fatal: Compilation aborted
make[3]: *** [fppkg] Ошибка 1
make[3]: Выход из каталога `/mnt/winD/INSTALL/fpcbuild-2.6.4/fpcsrc/utils/fppkg'
make[2]: *** [fppkg_all] Ошибка 2
make[2]: Выход из каталога `/mnt/winD/INSTALL/fpcbuild-2.6.4/fpcsrc/utils'
make[1]: *** [utils_all] Ошибка 2
make[1]: Выход из каталога `/mnt/winD/INSTALL/fpcbuild-2.6.4/fpcsrc'
make: *** [build-stamp.i386-linux] Ошибка 2



Lazarus и фрипаскаль последних версий (все x64), установлены из deb пакетов с оф.сайта (т.к. в репах очень старые). Версии лазаря, фпц и исходников фпц идентичны.

Чего ему не хватает?
И да, следовал по этой инструкции, т.к. она самая понятная + в оф.вики. Писанина на форумах и еже с ней сводит с_ума. Про бинутилс я вообще ничего не понял, да и в данной инструкции о них ни слова.

Linux Mint 17.2 x64.
Leonius_Bad
новенький
 
Сообщения: 51
Зарегистрирован: 29.11.2012 19:18:07

Re: Кросс-компиляция из под Linux x64 для Linux x32

Сообщение wavebvg » 08.08.2015 22:31:15

У Вас не прописаны пути до 32 битных библиотек. Список их указан в ошибке.
wavebvg
постоялец
 
Сообщения: 355
Зарегистрирован: 28.02.2008 04:57:35

Re: Кросс-компиляция из под Linux x64 для Linux x32

Сообщение Leonius_Bad » 09.08.2015 13:32:15

wavebvg писал(а):У Вас не прописаны пути до 32 битных библиотек. Список их указан в ошибке.

А куда именно нужно их прописать? :( Можно, пожалуйста, чуть подробней.
Я и так понимаю, что по инструкции эти самые 32 битные как раз должны только собраться после этой команды, ибо сейчас-то их нет.

И в первом сообщении не совсем удачный вывод дал. Там я экспериментировал с отдельно скаченным фпц-соруце.
Хотя разницы, наверное, никакой, ибо если запускать sudo make all CPU_TARGET=i386 в /usr/share/fpcsrc , выводит тоже самое, но с другими путями само собой:

Код: Выделить всё
Fatal: Compilation aborted
make[3]: *** [fppkg] Ошибка 1
make[3]: Выход из каталога `/usr/share/fpcsrc/2.6.4/utils/fppkg'
make[2]: *** [fppkg_all] Ошибка 2
make[2]: Выход из каталога `/usr/share/fpcsrc/2.6.4/utils'
make[1]: *** [utils_all] Ошибка 2
make[1]: Выход из каталога `/usr/share/fpcsrc/2.6.4'
make: *** [build-stamp.i386-linux] Ошибка 2


UPD: После выполнения команды (пусть даже неудачного) в папке i386-linux таки появляются модули, но, как видно не все...
Leonius_Bad
новенький
 
Сообщения: 51
Зарегистрирован: 29.11.2012 19:18:07

Re: Кросс-компиляция из под Linux x64 для Linux x32

Сообщение wavebvg » 10.08.2015 11:54:27

Нужно читать статьи в вики fpc, причем русcкие версии все порченные

Примерно вот так в fpc.cfg:
Код: Выделить всё
# path to the gcclib
#ifdef cpui386
-Fl/opt/syslibs/Ubuntu-14.04/usr/lib/gcc/i686-linux-gnu/4.8
-Fl/opt/syslibs/Ubuntu-14.04/usr/lib/i386-linux-gnu
-Fl/opt/syslibs/Ubuntu-14.04/lib/i386-linux-gnu
#endif
#ifdef cpuarm
-Fl/opt/syslibs/Ubuntu-14.04/usr/lib/gcc/arm-linux-gnueabihf
-Fl/opt/syslibs/Ubuntu-14.04/usr/lib/arm-linux-gnueabihf
-Fl/opt/syslibs/Ubuntu-14.04/lib/arm-linux-gnueabihf
#endif
#ifdef cpux86_64
-Fl/opt/syslibs/Ubuntu-14.04/usr/lib/gcc/x86_64-linux-gnu
-Fl/opt/syslibs/Ubuntu-14.04/usr/lib/x86_64-linux-gnu
-Fl/opt/syslibs/Ubuntu-14.04/lib/x86_64-linux-gnu
#endif
wavebvg
постоялец
 
Сообщения: 355
Зарегистрирован: 28.02.2008 04:57:35

Re: Кросс-компиляция из под Linux x64 для Linux x32

Сообщение Leonius_Bad » 10.08.2015 18:33:28

wavebvg писал(а):Нужно читать статьи в вики fpc, причем русcкие версии все порченные

Хмм...можно ссылочку, где именно Вы это нашли?
В фрипаскаль вики про кросс-компиляцию написано ровно тоже самое.
http://wiki.freepascal.org/Cross_compil ... Linux_i386
Или я совсем не там смотрю?
Leonius_Bad
новенький
 
Сообщения: 51
Зарегистрирован: 29.11.2012 19:18:07

Re: Кросс-компиляция из под Linux x64 для Linux x32

Сообщение VirtUX » 11.08.2015 07:04:13

Поставьте CodeTyphon, и будет счастье не только с кросскомпиляцией, но и во многих других аспектах. ИМХО. http://www.pilotlogic.com/sitejoom/index.php/codetyphon
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Кросс-компиляция из под Linux x64 для Linux x32

Сообщение Лекс Айрин » 11.08.2015 11:30:50

VirtUX, Тайфун всегда будет отставать от оригинала.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Кросс-компиляция из под Linux x64 для Linux x32

Сообщение wavebvg » 11.08.2015 18:48:58

Leonius_Bad писал(а):http://wiki.freepascal.org/Cross_compil ... Linux_i386
Или я совсем не там смотрю?

Да, этого вполне достаточно, чтобы все прекрасно собралось.
wavebvg
постоялец
 
Сообщения: 355
Зарегистрирован: 28.02.2008 04:57:35

Re: Кросс-компиляция из под Linux x64 для Linux x32

Сообщение Leonius_Bad » 13.08.2015 08:06:01

wavebvg писал(а):
Leonius_Bad писал(а):http://wiki.freepascal.org/Cross_compil ... Linux_i386
Или я совсем не там смотрю?

Да, этого вполне достаточно, чтобы все прекрасно собралось.


Возможно, мы друг друга недопоняли.
Я именно по такой инструкции всё и делал (она же аналогична инструкции из шапки), в итоге получая вышеуказанную ошибку.

Прописал в /etc/fpc.cfg аналогичные пути для своих библиотек:
Код: Выделить всё
# path to the gcclib
#ifdef cpui386
-Fl/usr/lib/gcc/i686-linux-gnu/4.8
-Fl/usr/lib/i386-linux-gnu
-Fl/lib/i386-linux-gnu
#endif
#ifdef cpux86_64
-Fl/usr/lib/gcc/x86_64-linux-gnu/4.8
-Fl/usr/lib/x86_64-linux-gnu
-Fl/lib/x86_64-linux-gnu
#endif

Никакого эффекта. Как выдавало ту злосчастную ошибку, так и выдает. Что еще-то не так?:( Или не там прописал? Не те прописал?

Тайфун не хочу, хочется последний лазарь всё же, да и разобраться с этим уже некое дело принципа=)
Leonius_Bad
новенький
 
Сообщения: 51
Зарегистрирован: 29.11.2012 19:18:07

Re: Кросс-компиляция из под Linux x64 для Linux x32

Сообщение wavebvg » 13.08.2015 10:39:21

Код: Выделить всё
ld: warning: ./link.res contains output sections; did you forget -T?
ld: cannot find -lpthread
ld: cannot find -ldl
ld: cannot find -lc

Это означает, что не найдены следующие файлы:
    /usr/lib/i386-linux-gnu/libpthread.so
    /usr/lib/i386-linux-gnu/libdl.so
    /usr/lib/i386-linux-gnu/libc.so
Компилятор ищет именно файлы с такими именами, поэтому для некоторых, возможно, придется сделать симлинки.

Помните, если у Вас Network Manager или PulseAudio, то наличие 32-битных библиотек может свести это программы с ума. Поэтому лучше все делать так, чтобы система не находила "левые" 32-битные библиотеки (я первый раз тупо копировал с arm и x86 системы и потом долго вычищал). Идеальный вариант, если кросскомпильные библиотеки Вы поставите через менеджер пакетов, но там слишком много заморочек (зато они сами будут обновляться вместе с системой).
wavebvg
постоялец
 
Сообщения: 355
Зарегистрирован: 28.02.2008 04:57:35

Re: Кросс-компиляция из под Linux x64 для Linux x32

Сообщение Сквозняк » 21.08.2015 06:21:27

Если собирать что-то с make, то оно конечно сложно и муторно, требует чтения манов. А если надо просто собирать 32 битные бинарники в линуксе, то ставишь необходимые 32 битные либы, при отсутствии каталога /lib32 делаешь соответствующий линк на /lib и пишешь башскрипт типа:
Код: Выделить всё
./cistka_vremennyh_failjv.sh

cd ~/fpc/fpc-2.6.0_32/bin/

./fpc  ~/..../proga.pp -Fu~/.../katalog_progi/lib/i386-linux/* -Fu~/fpc/fpc-2.6.0_32/lib/fpc/2.6.0/units/i386-linux/* -CR -O3 -Mfpc

Смотришь каких либ не хватает ставишь, а если не находятся то делаешь символические ссылки. Один раз наладишь сборку а потом она будет работать от клика мышкой по скрипту в менеджере файлов. Лазарусные программы собираются также, только надо указывать их модули до паскалевских а также не забыть конкретно указать опцию с версией графического тулкита ( -dLCLgtk2), а то соберёшь с gtk2 а потом бинарник вдруг попытается слинковаться с gtk3 и обломается.
Сквозняк
энтузиаст
 
Сообщения: 1129
Зарегистрирован: 29.06.2006 22:08:32

Re: Кросс-компиляция из под Linux x64 для Linux x32

Сообщение Cheb » 23.08.2015 11:44:55

По моему гораздо проще установить 32 битный линукс в виртуалбоксе, расшарить ему папки проекта и компилировать оттуда.
Заодно можно сразу проверять программу в работе на целевой системе.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Кросс-компиляция из под Linux x64 для Linux x32

Сообщение wavebvg » 23.08.2015 21:56:59

Cheb писал(а):По моему гораздо проще установить 32 битный линукс в виртуалбоксе, расшарить ему папки проекта и компилировать оттуда.
Заодно можно сразу проверять программу в работе на целевой системе.

Ради простой сборки запускать VM? Кросскомпилятор попроще будет.
wavebvg
постоялец
 
Сообщения: 355
Зарегистрирован: 28.02.2008 04:57:35

Re: Кросс-компиляция из под Linux x64 для Linux x32

Сообщение *Rik* » 23.08.2015 23:51:00

wavebvg писал(а):
Cheb писал(а):По моему гораздо проще установить 32 битный линукс в виртуалбоксе, расшарить ему папки проекта и компилировать оттуда.
Заодно можно сразу проверять программу в работе на целевой системе.

Ради простой сборки запускать VM? Кросскомпилятор попроще будет.

Я решил то-же не заморачиваться с кросскомпиляцией, и то-же склоняюсь к Virtualbox, у меня к тому-же там дофига всего завиртуалено, можно всегда проверить как оно на разных платформах и осях собирается, работает и выглядит, к тому-же иногда всякие попутные вопросы возникают, которые то-же интересно в разных системах попробовать. Ну и обновление то-же, у меня Lazarus обновляется вместе с осью, если нагородить, обновления отвалятся либо кросс-компиляция будет все время ломаться после обновления...
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 451
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: Кросс-компиляция из под Linux x64 для Linux x32

Сообщение wavebvg » 24.08.2015 10:55:31

*Rik* писал(а):...Ну и обновление то-же...

Если виртуалки нужны для достижения результата, то тут уже ничего и не попишешь. Но делать инкрементальную сборку проще без заморочек, особенно для x86 на 64, где и без виртуалки все запустится... Или когда железка какая-нить arm-ая и поднимать "для посмотреть" qemu образ лень, да и настройка удаленного отладчика пугает...
*Rik* писал(а):...обновления отвалятся либо кросс-компиляция будет все время ломаться...

Ну не знаю... 4 года работает (сейчас из каталога на флешке, вначале просто архив был), только в каталоги с либами меняю (правда я под винду не выполняю кросскомпиляции, пока причин не было)
Всё собирает из svn-а, пока полёт нормальный. Есть только одно но - иногда конфиги приходится править (для лазаря просто из домашеного каталога сношу настройки, потому что понять, от чего он заболел очень проблематично) - да, неприятная процедура, но никуда не денешься...
wavebvg
постоялец
 
Сообщения: 355
Зарегистрирован: 28.02.2008 04:57:35

След.

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

Рейтинг@Mail.ru