Компиляция под 32-бита из 64-битной системы
Модератор: Модераторы
Компиляция под 32-бита из 64-битной системы
Доброго времени суток, моя ОС — xubuntu x64, подскажите пожалуйста, как компилировать под 32 бита из 64-битной системы? man fpc | grep 64 или 32 ничего не дают.
А 32-битный fpc под xubuntu x64 не будет работать?
kipar писал(а):А 32-битный fpc под xubuntu x64 не будет работать?
Мне нужно держать оба варианта. Для gcc нужен просто флаг -m32 (ну и там кое-какие либы не забыть), а тут как выкручиваться? Выбирать между?
а здесь типа fpc -Pi386 и держать кучу дополнительных либ.
скачать CodeTyphon например
Здравствуйте, собираю лазарь 0.9.30.4 под i386, из под debian 7 amd64. FPC 2.6.0
В исходниках лазаря: make clean all CPU_TARGET=i386
В ответ: error message: Failed to execute "ppc386", error code: 127
Вопрос: как это исправить?
В исходниках лазаря: make clean all CPU_TARGET=i386
В ответ: error message: Failed to execute "ppc386", error code: 127
Вопрос: как это исправить?
hinst писал(а):скачать CodeTyphon например
И что? У него два независимых компилятора с двумя независимыми комплектами библиотек.
Хотя да, ставится наверно проще, чем два стандартных лазаруса x64 и х32
unclechu писал(а):моя ОС — xubuntu x64, подскажите пожалуйста, как компилировать под 32 бита из 64-битной системы?
Качаешь с freepascal.org *.tar.gz сборку и устанавливаешь из под простого пользователя в каталог в хомяке. Далее, собираешь программу скриптом, например таким:
Код: Выделить всё
./cistilka2.sh
cd ~/fpc/fpc-2.6.0_32/bin/
./fpc ~/putj/proga.pp -Fu~/fpc/fpc-2.6.0_32/lib/fpc/2.6.0/units/i386-linux/* -CR -O3 -Mfpc
read -p "Нажмите Enter для продолжения..."
Но в идеале использовать два скрипта, тогда можно собирать кликом мышки по файлу.
Добавлено спустя 41 минуту 17 секунд:
Linus писал(а):Здравствуйте, собираю лазарь 0.9.30.4 под i386, из под debian 7 amd64. FPC 2.6.0В исходниках лазаря: make clean all CPU_TARGET=i386В ответ: error message: Failed to execute "ppc386", error code: 127Вопрос: как это исправить?
Проще всего собрать в 32 битном дистрибутиве (или чруте) и скопипастить каталоги с файлами в 64 битный дистр. Рабочий 32 бит лазарус не нужен - компилятор fpc нужной версии хорошо собирает лазарусные программы, только -Fu с лазарусными модулями нужно писать раньше паскальных - имена конфликтуют.
Добавлено спустя 2 минуты 17 секунд:
SSerge писал(а):Хотя да, ставится наверно проще, чем два стандартных лазаруса x64 и х32
Ага, "проще", особенно если у тебя не используется sudo и ты не желаешь его заводить.
я уж думал получится, как то по-нормальному, без копипаста) попробуем опишемся
...скопипастил..
в fpc.cfg пописал
Лазарь ругается:
Проект использует целевую ОС linux и процессор i386.
System.ppu для этой цели не был найден в каталогах двоичных файлов FPC.
Убедитесь в том, что FPC установлен корректно для данной цели, и что в файл fpc.cfg вписаны верные каталоги.
...скопипастил..
в fpc.cfg пописал
Код: Выделить всё
#!386*******************************************************************************
# searchpath for units and other system dependent things
-Fu/usr/lib/fpc/$fpcversion/units/i386-linux
-Fu/usr/lib/fpc/$fpcversion/units/i386-linux/*
-Fu/usr/lib/fpc/$fpcversion/units/i386-linux/rtl
#IFDEF FPCAPACHE_1_3
-Fu/usr/lib/fpc/$fpcversion/units/i386-linux/httpd13/
#ELSE
#IFDEF FPCAPACHE_2_0
-Fu/usr/lib/fpc/$fpcversion/units/i386-linux/httpd20
#ELSE
-Fu/usr/lib/fpc/$fpcversion/units/i386-linux/httpd22
#ENDIF
#ENDIF
# searchpath for fppkg user-specific packages
-Fu~/.fppkg/lib/fpc/$fpcversion/units/i386-linux/*Лазарь ругается:
Проект использует целевую ОС linux и процессор i386.
System.ppu для этой цели не был найден в каталогах двоичных файлов FPC.
Убедитесь в том, что FPC установлен корректно для данной цели, и что в файл fpc.cfg вписаны верные каталоги.
в fpc.cfg пописал
Да вроде там и так нормально написано, ничего править не надо. На всякий случай поищи файлы fpc.cfg .fpc.cfg в каталоге пользователя, если найдёшь, удали - они там больше мешают чем помогают.
Лазарь ругается:
Проект использует целевую ОС linux и процессор i386.
А ты его не запускай, он и не будет ругаться
Код: Выделить всё
#!/bin/sh
p=`(echo ${BASH_SOURCE[0]}) 2>&1`
p=${p%%:*}
d=${p%/*}
cd $d
# скрипт для стирания *.o, *.a, *.ppu
./cistilka2.sh
cd ~/lazarus+/fpc-2.6.0-2.fc17.i686/usr/bin
./fpc ~/7/f/1/222/proga/ishodniki/q/proga.pp -dLCL -dLCLgtk2 -Fu~/7/f/1/222/proga/ishodniki/q/i_dr/* -Fu~/7/f/1/222/proga/ishodniki/q/laz/* -Fu~/lazarus+/lazarus-1.0.4-0.i386/usr/lib/lazarus/lcl/units/i386-linux/gtk2 -Fu~/lazarus+/lazarus-1.0.4-0.i386/usr/lib/lazarus/lcl/units/i386-linux -Fu~/lazarus+/lazarus-1.0.4-0.i386/usr/lib/lazarus/components/lazutils/lib/i386-linux -Fu~/lazarus+/fpc-2.6.0-2.fc17.i686/usr/lib/fpc/2.6.0/units/i386-linux/* -Fu~/7/f/1/222/proga/ishodniki/q/lib/i386-linux/* -CR -O3 -Mfpc
read -p "Нажмите Enter для продолжения..."Сквозняк писал(а):А ты его не запускай, он и не будет ругаться Проект пишешь и отлаживаешь в 64 битном лазаре а в таком же 32 битном только собираешь.
вот как на 32-х собирать? не ставить же 32 на виртуаль, только для этого. ИМХО извращение.
Опять его просим...
Код: Выделить всё
cd .lazarus-src-i386
make clean all CPU_TARGET=i386
....
Error: ppc386 can't be executed, error message: Failed to execute "ppc386", error code: 127
make[1]: *** [lazaruspackageintf.ppu] Ошибка 1
make[1]: Leaving directory `/home/programmeur/.lazarus-src-i386/packager/registration'
ppc386 лежит в /etc/fpc где ему положено, отмечен исполняемым.
Насколько я знаю, не так всё сложно. Общая последовательность действий (при сборке из исходников):
1. Собрать FPC под i386 (для этого лучше всего куда-нибудь скачать файл ppc386 и указать его в make all FPC=...)
2. Установить всё + ppc386 в путь для исполняемых файлов.
3. Собрать FPC для x86_64 (крайне желательно - с помощью скачанного ppcx64, кросс-компиляция только всё усложнит)
4. Установить всё + ppcx64. ppc386 не затрётся, пути к модулям - тем более.
5. Сгенерировать fpc.cfg
При этом должен подхватиться корректный компилятор, в параметрах fpc можно будет указывать правильную целевую платформу.
7. Собрать lazarus для желаемой платформы (лучше x86_64)
8. Запустить lazarus. При необходимости сборки проекта под другую платформу просто указать её явным образом в параметрах компилятора.
Вот, примерно, так. Я пробовал так делать с кодом из svn - получалось.
1. Собрать FPC под i386 (для этого лучше всего куда-нибудь скачать файл ppc386 и указать его в make all FPC=...)
2. Установить всё + ppc386 в путь для исполняемых файлов.
3. Собрать FPC для x86_64 (крайне желательно - с помощью скачанного ppcx64, кросс-компиляция только всё усложнит)
4. Установить всё + ppcx64. ppc386 не затрётся, пути к модулям - тем более.
5. Сгенерировать fpc.cfg
При этом должен подхватиться корректный компилятор, в параметрах fpc можно будет указывать правильную целевую платформу.
7. Собрать lazarus для желаемой платформы (лучше x86_64)
8. Запустить lazarus. При необходимости сборки проекта под другую платформу просто указать её явным образом в параметрах компилятора.
Вот, примерно, так. Я пробовал так делать с кодом из svn - получалось.
Выкачал исходники..собрал fpc под i386 и x64.. теперь все лежит в /usr/local/lib/fpc...
Пересобрал Лазарус. Под 64 опять же все работает, стоит только поставить целевую платформу i386 - летят маты (указывал путь к ppc386 при смене платформы -- не помогло).
Что делал:
...в голову вопрос забрел.. в ядре надо оставлять инструкции под различные процессоры? (я это при сборке вырубил)
Пересобрал Лазарус. Под 64 опять же все работает, стоит только поставить целевую платформу i386 - летят маты (указывал путь к ppc386 при смене платформы -- не помогло).
Что делал:
Код: Выделить всё
cd .fpc-2.6.0-src
make clean all PP=/home/programmeur/.fpc-2.6.0-src/ppc38
sudo make install PP=/home/programmeur/.fpc-2.6.0-src/ppc38
make clean all PP=/home/programmeur/.fpc-2.6.0-src/ppcx64
sudo make install PP=/home/programmeur/.fpc-2.6.0-src/ppcx64
sudo fpcmkcfg >/etc/fpc.cfg
...в голову вопрос забрел.. в ядре надо оставлять инструкции под различные процессоры? (я это при сборке вырубил)
...в голову вопрос забрел.. в ядре надо оставлять инструкции под различные процессоры? (я это при сборке вырубил)
Возможно - и даже очень вероятно. Если не работают обычные 32-разрядные бинарники, логично, что не будет работать и fpc. Только вопрос: собирается ли ppc386 (с помощью скачанного ppc386)? Если да, то дело не в этом.
И ещё: идентичны ли сборки ppcx64 и ppc386 (т.е., сделаны ли они с одних исходников)?
Далее: ppc386, ppcx64 и fpc (или хотя бы ссылки на них) надо разместить в одном каталоге.
-
Padre_Mortius
- энтузиаст
- Сообщения: 1265
- Зарегистрирован: 29.05.2007 17:38:07
- Откуда: Спб
Может стоит к оригинальной инструкции от разработчиков обратиться?
Там все подробно расписано.
P.S. для всяких *buntu для работы с 32-х битными приложениями нужно установить метапакет multiarch
Там все подробно расписано.
P.S. для всяких *buntu для работы с 32-х битными приложениями нужно установить метапакет multiarch
