Cross-Компиляция CT Linux x86_64 -> Linux i386

Вопросы программирования и использования среды Lazarus.

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

Cross-Компиляция CT Linux x86_64 -> Linux i386

Сообщение SergK » 16.12.2015 01:15:33

Добрый день.
Может кто подскажет с проблемой кросс-компиляции Linux x86_64 -> Linux i386 На CodeTyphon (на Lazarus тоже пробовал)
Собственно компиляция и сборка под Linux x86_64 проходит без проблем,
кросс-компиляция тоже проходит, не проходит сборка (линковка)

Выдаются следующие ошибки

Код: Выделить всё
/usr/lib/codetyphon/fpc/fpc64/bin/x86_64-linux/i386-linux-ld: skipping incompatible /usr/lib/x86_64-linux-gnu/crti.o when searching for /usr/lib/x86_64-linux-gnu/crti.o
/usr/lib/codetyphon/fpc/fpc64/bin/x86_64-linux/i386-linux-ld: cannot find /usr/lib/x86_64-linux-gnu/crti.o
/usr/lib/codetyphon/fpc/fpc64/bin/x86_64-linux/i386-linux-ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/crtbegin.o when searching for /usr/lib/gcc/x86_64-linux-gnu/4.8/crtbegin.o
/usr/lib/codetyphon/fpc/fpc64/bin/x86_64-linux/i386-linux-ld: cannot find /usr/lib/gcc/x86_64-linux-gnu/4.8/crtbegin.o
/usr/lib/codetyphon/fpc/fpc64/bin/x86_64-linux/i386-linux-ld: skipping incompatible /usr/lib/x86_64-linux-gnu//libdl.so when searching for -ldl
/usr/lib/codetyphon/fpc/fpc64/bin/x86_64-linux/i386-linux-ld: skipping incompatible /usr/lib/x86_64-linux-gnu//libdl.a when searching for -ldl
/usr/lib/codetyphon/fpc/fpc64/bin/x86_64-linux/i386-linux-ld: skipping incompatible /usr/lib/x86_64-linux-gnu//libatk-1.0.so when searching for -latk-1.0
/usr/lib/codetyphon/fpc/fpc64/bin/x86_64-linux/i386-linux-ld: cannot find -latk-1.0
Ну и так далее .....
окончание:
/usr/lib/codetyphon/fpc/fpc64/bin/x86_64-linux/i386-linux-ld: skipping incompatible /usr/lib/x86_64-linux-gnu//libc.so when searching for -lc
/usr/lib/codetyphon/fpc/fpc64/bin/x86_64-linux/i386-linux-ld: skipping incompatible /usr/lib/x86_64-linux-gnu//libc.a when searching for -lc
/usr/lib/codetyphon/fpc/fpc64/bin/x86_64-linux/i386-linux-ld: cannot find -lc
/home/sergey/tt1/project1.lpr(20,1) Error: (9013) Error while linking
/home/sergey/tt1/project1.lpr(20,1) Fatal: (10026) There were 1 errors compiling module, stopping
Fatal: (1018) Compilation aborted
Error: /usr/lib/codetyphon/fpc/fpc64/bin/x86_64-linux/ppcross386 returned an error exitcode


Проверял /usr/lib/x86_64-linux-gnu/crti.o Существует !!!! но видимо не нравится линковщику !
файл crti.o нашел только один и только в этом каталоге.
Возможно нужно установить какую то системную библиотеку... я не силен в линуксе.
SergK
новенький
 
Сообщения: 19
Зарегистрирован: 05.03.2011 18:24:51

Re: Cross-Компиляция CT Linux x86_64 -> Linux i386

Сообщение Mirage » 16.12.2015 01:44:39

SergK писал(а):Проверял /usr/lib/x86_64-linux-gnu/crti.o Существует !!!! но видимо не нравится линковщику !


Он жеж 64-х битный. Надо установить модули для 32-битного линукса.
Вроде CT все ставит.
Но я в последнее время FPCUp пользуюсь. Отлично работает (на более-менее свежих линухах) и нужды в CT у меня больше нет.
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: Cross-Компиляция CT Linux x86_64 -> Linux i386

Сообщение SergK » 17.12.2015 01:00:23

Он жеж 64-х битный. Надо установить модули для 32-битного линукса.

Ну это я догадываюсь что он 64-х битный ...
Вопрос то в том какие конкретно модули и как надо установить чтобы появился "такой же но 32-битный" и не только он
Сразу скажу, что файлы которые лежат в каталоге /usr/lib/x86_64-linux-gnu, как я догадываюсь, ни к FreePascal ни к Lazarus ни к CodeTyphon прямого отношения не имеют.
скорее всего это файлы-библиотеки от gtk2, возможно еще какие то системные библиотеки.
Надо сказать что, до того как мучиться с кросс компиляцией в CodeTyphon я извращался с FPC и транковым Lazarus'ом.

Не, не так...
Сначала я поставил CodeTyphon под Винду, 32 разрядный компилятор потом 64 разрядный компилятор, 32 разрядную IDE потом 64 разрядную IDE все - встало изумительно
И все работает параллельно, хочешь запускаешь 32-х разрядный Typhon, хочешь запускаешь 64-х разрядный Typhon.

Затем стал ставить CodeTyphon под Линукс. ну вроде по той же схеме 32 FPC, 64 FPC, 32 IDE, 64 IDE.....
32-x раз. Typhon не скомпилировался... 64-x раз. без проблем...
Пытался понять почему: не хватает каких то модулей (unit-ов файлов *.ppu) ... стал смотреть..
Оказывается 32-x раз. компилятор установился не полностью(в отличии от 64-раз. ) .... многих unit 'ов не хватает.
При установке компиляторов Typhon'а сам компилятор распаковывается из архива а вот unit'ы им компилируются из исходников.
Соответственно компилятор то есть, а вот unit-ы не скомпилировалисть.

Ставил транковый FPC и Lazarus под винду - все скомпилировалось без проблем. (только 32-х разрядный)

Под Линукс не стал ставить FPC из транка, скачал с ftp:\\ftp.freepascal.org версию 3.0.0
сначала установил 32-раз. версию.
В отличии от 32-раз. из состава CodeTyphon все unit-ы на месте, тут они не компилируются при установке а просто копируются из дистрибутива.
Проверил компилируется ли простая программа - компилируется и работает. в отличии от FPC-32 из CodeTyphon где не было даже system.ppu и поэтому фактически ничего не компилировалось.
Решил собрать Lazarus (тот же самый что под винду ставил. ) а фиг-вам, скомпилировался только lazbuild, а вот lazarus и startlazarus, не скомпилировались. им как я понял
тоже не нравились файлы ctri.o и далее по списку что я приводил в первом посте.
Снес установленный FPC 32-раз. поставил FPC 64-раз. версию с 3.0.0 оттуда же с ftp:\\ftp.freepascal.org
И тут весь Lazarus откомпилировался и lazbuild, и lazarus, и startlazarus и работает.

Под CodeTyphon легко устанавливаются кросс-компиляторы. Решил поставить кросс-компилятор из-под Linux 64 на Linux 32. Поставил.
Компиляция проходит вроде как надо, без проблем а на этапе сборки... ну ошибки я приводил.
То что компиляция проходит без проблем видно по сообшениям компилятора и по наличию в папке проекта а подпапке lib как папки x86_64-linux с *.ppu (когда просто проект компилировался) так и папки i386-linux с *.ppu (кросс-компиляция)

Вывод: на этапе сборки программы, или компиляции некоторых модулей под Linux используются некоторые библиотеки не входящие явно в состав FPC, пример ctri.o.
Эти библиотеки могут быть как 64 так и 32 разрядные. для сборки 32 разрядной программы должны быть 32 разрядные библиотеки.
А вот как их поставить, если по умолчанию с 64 разрядным линкусом идут только 64 разрядные библиотеки...

Извините за сумбурность...
SergK
новенький
 
Сообщения: 19
Зарегистрирован: 05.03.2011 18:24:51

Re: Cross-Компиляция CT Linux x86_64 -> Linux i386

Сообщение VirtUX » 17.12.2015 13:48:35

1. Проверьте поддержку Мультиархитектуры Вашей версии CT под вашу ОС.
2. При установке CT выбирайте Мультиархитектурность, и после этого установите библиотеки (все подтянутся автоматически).
3. Устанавливайте CT. Он создаст два ярлыка запуска для 32 и 64 IDE. Если для 32 не создаст, то всё одно кросскомпилить должен нормально, если установить и собрать соответствующую косскомпиляцию в CT после установки.
4. Всё работает отлично, если условия и последовательность описанные выше соблюдены.
5. Все эти моменты описаны в инструкции по установке, и на форуме CT.
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Cross-Компиляция CT Linux x86_64 -> Linux i386

Сообщение Mirage » 18.12.2015 00:21:47

Эти либы, насколько я понимаю, принадлежат GCC toolchain, который участвует в компиляции (на этапе сборки) и который также надо ставить для всех платформ, под которые планируется собирать.
CT и FPCUp это ставят, но, возможно, что-то пошло нет так и они не установились.
Можно попробовать еще раз поставить CT начисто.
Можно попробовать FPCUp, благо теперь там тоже просто кросскомпилятор настроить. Конфиг только излишне замороченный и неочевидный. Но примеры есть.
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru