Sign in Join
Wiki copytemporary

Cross compiling for Win32 under Linux/ru: what changed

Revision 2 to 3. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
1-## Contents
2-
3- * 1 Заметки по кросс-компиляции исполняемых файлов Win32 из Linux
4- * 2 Lazarus и Free Pascal Compiler
5- * 2.1 О кросс-компиляции - понимайте то что вы делаете
6- * 2.2 Почему из *nix в windows а не по-другому.
7- * 2.3 Скачивание исходных кодов FPC
8- * 2.4 Скачивание gnu binutils.
9- * 2.5 Кроссплатформенная сборка binutils
10- * 2.6 Кроссплатформенная сборка FPC
11- * 2.7 Конфигурирование вашего fpc.cfg
12- * 2.8 Кросс-компиляция LCL и компонентов lazarus
13- * 2.9 Коросс-компиляция проекта
14- * 2.10 Подсказки по кросс-компиляции и Lazarus
15- * 2.11 Кросс-компиляция и пакеты Lazarus
16- * 3 Для Unix (в общих чертах)
17- * 4 Для Linux под Win32
18- * 5 FreeBSD для sparc
19- * 6 Для Mac OS X
20- * 7 Авторы
21-
221## Заметки по кросс-компиляции исполняемых файлов Win32 из Linux
232
24-Начиная с 0.9.10 существует rpm 'fpc-crosswin32', который устанавливает необходимые утилиты binutils (например кросс ассемблер, кросс линкер), fpc .ppu файлы скомпилированные для win32 и вносит изменения в /etc/fpc.cfg.
3+Начиная с 0.9.10 существует rpm 'fpc-crosswin32', который устанавливает необходимые утилиты binutils (например кросс ассемблер, кросс линкер), fpc .ppu файлы скомпилированные для win32 и вносит изменения в /etc/fpc.cfg.
254
26-Он не включает кросс-скомпилированные LCL .ppu файлы. Вам нужно скомпилировать их самостоятельно после установки, fpc-crosswin32.
5+Он не включает кросс-скомпилированные LCL .ppu файлы. Вам нужно скомпилировать их самостоятельно после установки, fpc-crosswin32.
276
28-
297Также существует быстрый способ описанный тут: <http://wiki.lazarus.freepascal.org/Cross_compiling/ru>
308
319## Lazarus и Free Pascal Compiler
3210
3311### О кросс-компиляции - понимайте то что вы делаете
3412
35-Это короткое введение для новичков. В последующих разделах описывается как настроить систему для кросс-компиляции, имеется ввиду работая под linux создавать исполняемые файлы win32 (или freebsd, или dawin, или...) Почему кросс-компиляция: FreePascal это компилятор, преобразующий исходный код в исполняемые файлы (на машинном языке). Эти исполняемые файлы, кроме всего прочего, содержат информацию о том как операционная система запускает их на выполнение. Поэтому исполняемые файлы являются платформенно-зависимыми. Сам FreePascal не требует различных дистрибутивов. Он может создавать исполняемые файлы для многих платформ. Просто укажите ему это. Но компилятор - это только одна часть. Существует ещё ассемблер и линкер. И эти утилиты не способны создавать кроссплатформенный код. Поэтому были созданы специальные утилиты линкер 'ld' и ассемблер 'as' для каждой целевой платформы. Это binutils. После создания кроссплатформенных утилит все модули fpc pascal будут кросс-компилированы. Например, для каждой из целевых платформ существует отдельный файл system.ppu. Затем ваш конфигурационный файл fpc.cfg будет перенастроен, таким образом кросс-компиляция станет настолько лёгкой, что вы сможете забыть обо всех мелочах. То же самое нужно проделать и с LCL - lazarus component library. И после этого вы сможете кросс-компилировать программы на паскале для win32. Затем проверить их при помощи wine или скопировать на машину с Windows и протестировать на ней.
13+Это короткое введение для новичков. В последующих разделах описывается как настроить систему для кросс-компиляции, имеется ввиду работая под linux создавать исполняемые файлы win32 (или freebsd, или dawin, или...) Почему кросс-компиляция: FreePascal это компилятор, преобразующий исходный код в исполняемые файлы (на машинном языке). Эти исполняемые файлы, кроме всего прочего, содержат информацию о том как операционная система запускает их на выполнение. Поэтому исполняемые файлы являются платформенно-зависимыми. Сам FreePascal не требует различных дистрибутивов. Он может создавать исполняемые файлы для многих платформ. Просто укажите ему это. Но компилятор - это только одна часть. Существует ещё ассемблер и линкер. И эти утилиты не способны создавать кроссплатформенный код. Поэтому были созданы специальные утилиты линкер 'ld' и ассемблер 'as' для каждой целевой платформы. Это binutils. После создания кроссплатформенных утилит все модули fpc pascal будут кросс-компилированы. Например, для каждой из целевых платформ существует отдельный файл system.ppu. Затем ваш конфигурационный файл fpc.cfg будет перенастроен, таким образом кросс-компиляция станет настолько лёгкой, что вы сможете забыть обо всех мелочах. То же самое нужно проделать и с LCL - lazarus component library. И после этого вы сможете кросс-компилировать программы на паскале для win32. Затем проверить их при помощи wine или скопировать на машину с Windows и протестировать на ней.
3614
3715### Почему из *nix в windows а не по-другому.
3816
39-Основная причина - генерирование unix-бинарников на другой платформе (другой unix или Linux) более сложно. Более сложное статическое связывание, не говоря уж об остальном.
17+Основная причина - генерирование unix-бинарников на другой платформе (другой unix или Linux) более сложно. Более сложное статическое связывание, не говоря уж об остальном.
4018
41-Придется использовать библиотеки из целевой платформы (gtk, glib, libc и т.д.), и множество дополнительных настроек для ld. (пути к библиотекам, путь к линкеру и т.д.)
19+Придется использовать библиотеки из целевой платформы (gtk, glib, libc и т.д.), и множество дополнительных настроек для ld. (пути к библиотекам, путь к линкеру и т.д.)
4220
43-Это было частично сделано (в статическом случае), но это сложно т.к. требует внесения изменений в файлы линкера и командную строку линкера, а также глубокого понимания о сборке бинарников Unix.
21+Это было частично сделано (в статическом случае), но это сложно т.к. требует внесения изменений в файлы линкера и командную строку линкера, а также глубокого понимания о сборке бинарников Unix.
4422
4523### Скачивание исходных кодов FPC
4624
47-Исполняемых файлов недостаточно, вам потребуются все исходники fpc. Обратитесь к www.freepascal.org. Вы можете использовать SVN или ежедневные сборки. Для следующих примеров исходники fpc были скачены в папку ~/sources/fpc.
25+Исполняемых файлов недостаточно, вам потребуются все исходники fpc. Обратитесь к www.freepascal.org. Вы можете использовать SVN или ежедневные сборки. Для следующих примеров исходники fpc были скачены в папку ~/sources/fpc.
4826
4927### Скачивание gnu binutils.
5028
51-Например, binutils-2.18.tar.gz скачайте в ~/download/binutils-2.18.tar.gz.
29+Например, binutils-2.18.tar.gz скачайте в ~/download/binutils-2.18.tar.gz.
5230
5331### Кроссплатформенная сборка binutils
5432
55-В репозитории fpcbuild существует скрипт для сборки binutils для всех поддерживаемых целевых платформ: install/cross/buildcrossbinutils
33+В репозитории fpcbuild существует скрипт для сборки binutils для всех поддерживаемых целевых платформ: install/cross/buildcrossbinutils
5634
57-Скачиваем инсталлятор fpcbuild:
58-```
59-[]$ cd ~
60- []$ svn co <http://svn.freepascal.org/svn/fpcbuild/branches/fixes_2_4/install> install
61-```
35+Скачиваем инсталлятор fpcbuild:
6236
63-Создаём копию скрипта:
64-```
65-[]$ cd ~/install/cross/
66- []$ cp buildcrossbinutils buildcrossbinutils.sh
67-```
37+` []$ cd ~`\
38+` []$ svn co `[`http://svn.freepascal.org/svn/fpcbuild/branches/fixes_2_4/install`](http://svn.freepascal.org/svn/fpcbuild/branches/fixes_2_4/install)` install`
6839
69-Правим переменные в начале нового скрипта.
40+Создаём копию скрипта:
7041
71-Переменная BASE указывает на директорию сборки и установки. Директория должна быть пустой. Например:
72-```
73-BASE=~/cross_fpc
74-```
42+` []$ cd ~/install/cross/`\
43+` []$ cp buildcrossbinutils buildcrossbinutils.sh`
7544
76-Теперь разберёмся со скачанным файлом binutils. Если путь к скачанному файлу ~/download/binutils-2.18.tar.gz то укажем
77-```
78-BINUTILSPATH=~/download/
79- BINUTILSBASE=binutils
80- BINUTILSVERSION=2.18
81- BINUTILS_GZIP=yes
82-```
45+Правим переменные в начале нового скрипта.
8346
84-Скрипт будет автоматически соберёт это в ~/download/binutils-2.18.tar.gz. Остальные переменные определяют какие целевые платформы мы имеем. По умолчанию их довольно много, поэтому компиляция может занять много времени (часы на слабых машинах). Для кросс-компиляции для Windows вам потребуется только
85-```
86-TARGETS_WIN="mingw32"
87-```
47+Переменная BASE указывает на директорию сборки и установки. Директория должна быть пустой. Например:
8848
89-и закомментировать все остальные:
90-```
91-#BSD="freebsd netbsd openbsd"
92- #TARGETS_WIN="cygwin mingw32 msdosdjgpp"
93- #TARGETS_I386="${BSD} linux solaris darwin"
94- #TARGETS_POWERPC="${BSD} linux darwin"
95- #TARGETS_SPARC="${BSD} linux solaris"
96- #TARGETS_M68k=
97-```
49+` BASE=~/cross_fpc`
9850
99-
100-Затем запустите скрипт:
101-```
102-[]$ sh buildcrossbinutils.sh
103-```
51+Теперь разберёмся со скачанным файлом binutils. Если путь к скачанному файлу ~/download/binutils-2.18.tar.gz то укажем
10452
105-Скрипт создаст поддиректорию 'logs' с соответствующим содержимым. В случае чего, начните поиски оттуда.
53+` BINUTILSPATH=~/download/`\
54+` BINUTILSBASE=binutils`\
55+` BINUTILSVERSION=2.18`\
56+` BINUTILS_GZIP=yes`
10657
58+Скрипт будет автоматически соберёт это в ~/download/binutils-2.18.tar.gz. Остальные переменные определяют какие целевые платформы мы имеем. По умолчанию их довольно много, поэтому компиляция может занять много времени (часы на слабых машинах). Для кросс-компиляции для Windows вам потребуется только
59+
60+` TARGETS_WIN="mingw32"`\
61+` `
62+
63+и закомментировать все остальные:
64+
65+` #BSD="freebsd netbsd openbsd"`\
66+` #TARGETS_WIN="cygwin mingw32 msdosdjgpp"`\
67+` #TARGETS_I386="${BSD} linux solaris darwin"`\
68+` #TARGETS_POWERPC="${BSD} linux darwin"`\
69+` #TARGETS_SPARC="${BSD} linux solaris"`\
70+` #TARGETS_M68k=`
71+
72+Затем запустите скрипт:
73+
74+` []$ sh buildcrossbinutils.sh`
75+
76+Скрипт создаст поддиректорию 'logs' с соответствующим содержимым. В случае чего, начните поиски оттуда.
77+
10778Заметьте что для некоторых платформ (Linux,FreeBSD, win32) утилиты доступны в скомпилированном виде. Смотрите <ftp://freepascal.stack.nl/pub/fpc/contrib/cross/>
10879
10980### Кроссплатформенная сборка FPC
11081
111-В рекозитории fpcbuild существует скрипт для сборки fpc под все поддерживаемые целевые платформы: install/cross/buildcrosssnapshot Создайте копию скрипта
112-```
113-[]$ cd ~/install/cross/
114- []$ cp buildcrosssnapshot buildcrosssnapshot.sh
115-```
82+В рекозитории fpcbuild существует скрипт для сборки fpc под все поддерживаемые целевые платформы: install/cross/buildcrosssnapshot Создайте копию скрипта
11683
117-Исправьте переменные в начале нового скрипта.
84+` []$ cd ~/install/cross/`\
85+` []$ cp buildcrosssnapshot buildcrosssnapshot.sh`
11886
119-Вам потребуется изменить всего лишь CROSSTOOLSROOT, FPCCVS, DESTDIR, TARGETS_OS и TARGETS_CPU. Например:
120-```
121-CROSSTOOLSROOT=~/cross_fpc/cross
122- FPCCVS=~/sources/fpc
123- TARGETS_OS="win32"
124- TARGETS_CPU="i386"
125- DESTDIR=~/cross_fpc/
126-```
87+Исправьте переменные в начале нового скрипта.
12788
128-Затем запустите скрипт:
129-```
130-[]$ sh buildcrosssnapshot.sh
131-```
89+Вам потребуется изменить всего лишь CROSSTOOLSROOT, FPCCVS, DESTDIR, TARGETS_OS и TARGETS_CPU. Например:
13290
133-После этого вы получите кросс-компилированные модули в ~/cross_fpc/
91+` CROSSTOOLSROOT=~/cross_fpc/cross`\
92+` FPCCVS=~/sources/fpc`\
93+` TARGETS_OS="win32"`\
94+` TARGETS_CPU="i386"`\
95+` DESTDIR=~/cross_fpc/`\
96+` `
13497
98+Затем запустите скрипт:
99+
100+` []$ sh buildcrosssnapshot.sh`
101+
102+После этого вы получите кросс-компилированные модули в ~/cross_fpc/
103+
135104### Конфигурирование вашего fpc.cfg
136105
137-Откройте с правами рута /etc/fpc.cfg или создайте копию /etc/fpc.cfg to ~/fpc.cfg и отредактируйте этот файл. Найдите в файле пути поиска модулей.
106+Откройте с правами рута /etc/fpc.cfg или создайте копию /etc/fpc.cfg to ~/fpc.cfg и отредактируйте этот файл. Найдите в файле пути поиска модулей.
138107
139-Примечание: В более старых версиях FPC вместо $fpcversion и $fpctarget использовались $version и $target.
140-```
141--Fu/usr/lib/fpc/$fpcversion/units/$fpctarget
142- -Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/*
143- -Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/rtl
144-```
108+Примечание: В более старых версиях FPC вместо \$fpcversion и \$fpctarget использовались \$version и \$target.
145109
146-Замените их специальными путями для других платформ. Например, для linux и кросс-компилированной win32:
147-```
148-#IFDEF win32
149- -Fu~/cross_fpc/lib/fpc/$fpcversion/cross/units/i386-win32/
150- -Fu~/cross_fpc/lib/fpc/$fpcversion/cross/units/i386-win32/*
151- -Fu~/cross_fpc/lib/fpc/$fpcversion/cross/units/i386-win32/rtl
152- -XPi686-mingw32-
153- -FD~/cross_fpc/cross/bin
154- #ELSE linux
155- -Fu/usr/lib/fpc/$fpcversion/units/$fpctarget
156- -Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/*
157- -Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/rtl
158- #-Fu~/fpc/packages/*;~/fpc/rtl/linux
159- #ENDIF
160-```
110+`-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget`\
111+`-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/*`\
112+`-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/rtl`
161113
162-Выполните: тестирование и устранение неполадок.
114+Замените их специальными путями для других платформ. Например, для linux и кросс-компилированной win32:
163115
116+`#IFDEF win32`\
117+`-Fu~/cross_fpc/lib/fpc/$fpcversion/cross/units/i386-win32/`\
118+`-Fu~/cross_fpc/lib/fpc/$fpcversion/cross/units/i386-win32/*`\
119+`-Fu~/cross_fpc/lib/fpc/$fpcversion/cross/units/i386-win32/rtl`\
120+`-XPi686-mingw32-`\
121+`-FD~/cross_fpc/cross/bin`\
122+`#ELSE linux`\
123+`-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget`\
124+`-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/*`\
125+`-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/rtl`\
126+`#-Fu~/fpc/packages/*;~/fpc/rtl/linux`\
127+`#ENDIF`
128+
129+Выполните: тестирование и устранение неполадок.
130+
164131### Кросс-компиляция LCL и компонентов lazarus
165132
166-В коммандной строке:
167-```
168-cd lazarus; make clean all OS_TARGET=win32
169- cd lazarus/lcl; make clean all
170-```
133+В коммандной строке:
171134
172-Таким образом всё скомпилируется для win32 (включая IDE, что необязательно, но это сокращает объём манипуляций).
135+`cd lazarus; make clean all OS_TARGET=win32`\
136+`cd lazarus/lcl; make clean all `
173137
174-Или в IDE Сервис->Параметры сборки: отметим LCL, Synedit, Codetools, Регистрация пакетов и Интерфейс IDE как Очистить+Собрать, установми в поле Библиотека виджетов LCL значение win32/win64, а Целевая ОС - win32. Затем нажмём 'Собрать'. Ваши файлы .ppu/.o скомпилированные для linux не будут перезаписаны и вам не нужно будет перекомпилировать их каждый раз, т.к. в рабочей папке будут созданы специальные директории для других целевых систем.
138+Таким образом всё скомпилируется для win32 (включая IDE, что необязательно, но это сокращает объём манипуляций).
175139
140+Или в IDE Сервис-\>Параметры сборки: отметим LCL, Synedit, Codetools, Регистрация пакетов и Интерфейс IDE как Очистить+Собрать, установми в поле Библиотека виджетов LCL значение win32/win64, а Целевая ОС - win32. Затем нажмём 'Собрать'. Ваши файлы .ppu/.o скомпилированные для linux не будут перезаписаны и вам не нужно будет перекомпилировать их каждый раз, т.к. в рабочей папке будут созданы специальные директории для других целевых систем.
141+
176142### Коросс-компиляция проекта
177143
178-Выберите Проект->Параметры проекта->Параметры компилятора->Генерация кода Целевая ОС='win32' и Проект->Параметры проекта->Параметры компилятора->Пути Библиотека виджетов LCL='win32'. Вот и всё. При следующей компиляции будет создан исполняемый файл win32. IDE произведёт поиск утилит win32, поэтому компилятор будет работать с rtl для win32 вместо rtl для linux. Когда вы откроете другой проект или закроете текущий и откроете его вновь IDE автоматически установит настройки.
144+Выберите Проект-\>Параметры проекта-\>Параметры компилятора-\>Генерация кода Целевая ОС='win32' и Проект-\>Параметры проекта-\>Параметры компилятора-\>Пути Библиотека виджетов LCL='win32'. Вот и всё. При следующей компиляции будет создан исполняемый файл win32. IDE произведёт поиск утилит win32, поэтому компилятор будет работать с rtl для win32 вместо rtl для linux. Когда вы откроете другой проект или закроете текущий и откроете его вновь IDE автоматически установит настройки.
179145
180146### Подсказки по кросс-компиляции и Lazarus
181147
182-Если вы создаете приложение/пакет для различных целевых ОС, вам необходимо действовать следующим образом: устранить баги, скомпилировать и протестировать приложение под linux, затем скомпилировать и протестировать его под win32, .. . Потому что обычно вы перезаписываете ваши .ppu файлы, и вам придётся перекомпилировать всё, каждый раз когда вы переключаете захотите изменить целевую ОС. Но это не обязательно. Lazarus поддреживает макросы.
148+Если вы создаете приложение/пакет для различных целевых ОС, вам необходимо действовать следующим образом: устранить баги, скомпилировать и протестировать приложение под linux, затем скомпилировать и протестировать его под win32, .. . Потому что обычно вы перезаписываете ваши .ppu файлы, и вам придётся перекомпилировать всё, каждый раз когда вы переключаете захотите изменить целевую ОС. Но это не обязательно. Lazarus поддреживает макросы.
183149
184-Пример 1: Кросс-компиляция проекта для linux и win32.
150+Пример 1: Кросс-компиляция проекта для linux и win32.
185151
186-Установите значение Проект-> Параметры компилятора->Пути->Каталог вывода модулей = $(TargetOS). Этот макрос будет заменён названием целевой ОС в нижнем регистре (например 'linux' для Linux, 'win32' для Win32). Каталог вывода модулей находится в директории вашего проекта (директории где расположен файл .lpi). Создайте директории с именами 'linux' и 'win32' в директории вашего проекта. Когда вы кликните на кнопке 'Показать параметры' в самом низу окна Параметры проекта, вы увидите -FElinux/ или -FEwin32/. Эта опция сообщает компилятору куда записать создаваемые файлы (файлы .ppu/.o).
152+Установите значение Проект-\> Параметры компилятора-\>Пути-\>Каталог вывода модулей = \$(TargetOS). Этот макрос будет заменён названием целевой ОС в нижнем регистре (например 'linux' для Linux, 'win32' для Win32). Каталог вывода модулей находится в директории вашего проекта (директории где расположен файл .lpi). Создайте директории с именами 'linux' и 'win32' в директории вашего проекта. Когда вы кликните на кнопке 'Показать параметры' в самом низу окна Параметры проекта, вы увидите -FElinux/ или -FEwin32/. Эта опция сообщает компилятору куда записать создаваемые файлы (файлы .ppu/.o).
187153
188-Пример 2: Кросс-компиляция проекта для различных платформ и наборов виджетов.
154+Пример 2: Кросс-компиляция проекта для различных платформ и наборов виджетов.
189155
190-Укажите Каталог вывода модулей следующим образом $(TargetCPU)/$(TargetOS)/$(LCLWidgetType) и создайте поддиректории для всех целей. Этот путь также используется LCL.
156+Укажите Каталог вывода модулей следующим образом \$(TargetCPU)/\$(TargetOS)/\$(LCLWidgetType) и создайте поддиректории для всех целей. Этот путь также используется LCL.
191157
192-То же самое можно проделать и для пакетов.
158+То же самое можно проделать и для пакетов.
193159
194160### Кросс-компиляция и пакеты Lazarus
195161
196-Пакеты Lazarus не ограничены библиотеками. Они могут быть использованы для компиляции практически чего угодно. И IDE автоматически перекомпилирует их при необходимости. Пакеты могут наследовать опции компилятора. Например: проект, использующий пакет, наследует каталог вывода пакета. Другими словами: каталог вывода пакета добавляется в пути поиска модулей проекта. Посмотрите в IDE: Проект->Параметры проекта->Параметры компилятора->Унаследованные.
162+Пакеты Lazarus не ограничены библиотеками. Они могут быть использованы для компиляции практически чего угодно. И IDE автоматически перекомпилирует их при необходимости. Пакеты могут наследовать опции компилятора. Например: проект, использующий пакет, наследует каталог вывода пакета. Другими словами: каталог вывода пакета добавляется в пути поиска модулей проекта. Посмотрите в IDE: Проект-\>Параметры проекта-\>Параметры компилятора-\>Унаследованные.
197163
198-Наследование срабатывает единажды. Но существуют исключения: Целевая платформа (ОС и CPU) проекта переопределяет цель для всех используемых пакетов. Это значит, если вы укажете Целевую ОС в проекте = 'win32' и скомпилируете проект, IDE выполнит проверку на предмет необходимости перекомпиляции пакетов для Целевой ОС.
164+Наследование срабатывает единажды. Но существуют исключения: Целевая платформа (ОС и CPU) проекта переопределяет цель для всех используемых пакетов. Это значит, если вы укажете Целевую ОС в проекте = 'win32' и скомпилируете проект, IDE выполнит проверку на предмет необходимости перекомпиляции пакетов для Целевой ОС.
199165
200-Пример:
166+Пример:
201167
202-Пакет А имеет директорию вывода: lib/$(TargetOS) Проект использует А.
168+Пакет А имеет директорию вывода: lib/\$(TargetOS) Проект использует А.
203169
204- 1. Проект собирается для linux. IDE компилирует А для linux в <PackageDirOfA>/lib/linux/, затем компилирует проект для linux.
205- 2. Проект собирается для win32. IDE компилирует А для win32 в <PackageDirOfA>/lib/win32/, затем компилирует проект для win32.
206- 3. Проект снова собирается для linux. IDE проверяет, существует ли А для linux. Затем компилирует проект для linux.
170+1. Проект собирается для linux. IDE компилирует А для linux в \<PackageDirOfA\>/lib/linux/, затем компилирует проект для linux.
171+2. Проект собирается для win32. IDE компилирует А для win32 в \<PackageDirOfA\>/lib/win32/, затем компилирует проект для win32.
172+3. Проект снова собирается для linux. IDE проверяет, существует ли А для linux. Затем компилирует проект для linux.
207173
208-Таким образом, использование макросов экономит много времени.
174+Таким образом, использование макросов экономит много времени.
209175
210176## Для Unix (в общих чертах)
211177
212-Опция -XLA используется для изменения зависимостей библиотек определённых в модулях. Формат -XLAold=new изменяет link-опцию ld -l<old> на -l<new>.
178+Опция -XLA используется для изменения зависимостей библиотек определённых в модулях. Формат -XLAold=new изменяет link-опцию ld -l\<old\> на -l\<new\>.
213179
214-Опция -XR<sysroot> (recent trunk) может быть использована для указания корня Целевой ОС. Она используется для:
180+Опция -XR\<sysroot\> (recent trunk) может быть использована для указания корня Целевой ОС. Она используется для:
215181
216- * добавления префикса к указанным по-умолчанию путям библиотек, в прошлом вы использовали -Xd и эти пути вручную. Например для i386-linux
182+- добавления префикса к указанным по-умолчанию путям библиотек, в прошлом вы использовали -Xd и эти пути вручную. Например для i386-linux
217183
218-вместо следования в /lib, /usr/lib, и /usr/X11R6/lib к ld, будет следовать в <sysroot>/lib, <sysroot>/usr/lib, и <sysroot>/usr/X11R6/lib к ld.
184+вместо следования в /lib, /usr/lib, и /usr/X11R6/lib к ld, будет следовать в \<sysroot\>/lib, \<sysroot\>/usr/lib, и \<sysroot\>/usr/X11R6/lib к ld.
219185
220- * определение местоположения библиотек С (linux-версий): glibc или uclibc. Например для uclibc будет принята попытка поиска по пути '<sysroot>/lib/ld-uClibc.so.0'
186+- определение местоположения библиотек С (linux-версий): glibc или uclibc. Например для uclibc будет принята попытка поиска по пути '\<sysroot\>/lib/ld-uClibc.so.0'
221187
222188## Для Linux под Win32
223189
224190Это просто, есть некоторая информация в [[buildfaq]]
225191
226192## FreeBSD для sparc
227193
228-Я пытался кросс-компилировать из х86 для Sparc Solaris 9. Несмотря на то что результат не работал должным образом привожу мою командную строку:
194+Я пытался кросс-компилировать из х86 для Sparc Solaris 9. Несмотря на то что результат не работал должным образом привожу мою командную строку:
229195
230-в компилятор / выполнить:
231-```
232-gmake cycle CPU_TARGET=sparc OS_TARGET=solaris CROSSBINUTILPREFIX=solaris-sparc- CROSSOPT='-Xd -Fl~/src/sollib'
233-```
196+в компилятор / выполнить:
234197
235-~/src/sollib директория которая содержит:
198+` gmake cycle CPU_TARGET=sparc OS_TARGET=solaris CROSSBINUTILPREFIX=solaris-sparc- CROSSOPT='-Xd -Fl~/src/sollib'`
236199
237- * набор файлов .o из /usr/local/gcc-3.3-32bit/lib/gcc-lib/sparc-sun-solaris/3.3
238- * libgcc.a из /usr/local/gcc-3.3-32bit/lib/gcc-lib/sparc-sun-solaris/3.3
239- * набор файлов lib*.so из /usr/lib: libaio.so libmd5.so libc.so libelf.so librt.so libdl.so libm.so
200+~/src/sollib директория которая содержит:
240201
241-Иллюстрация проблемы при компиляции:
242-```
243-Free Pascal Compiler version 2.1.1 [2006/03/17] for sparc
244- Copyright (c) 1993-2005 by Florian Klaempfl
245- Target OS: Solaris for SPARC
246- Compiling system.pp
247- system.pp(15,1) Fatal: Syntax error, "BEGIN" expected but "identifier UNIT" found
248-```
202+- набор файлов .o из /usr/local/gcc-3.3-32bit/lib/gcc-lib/sparc-sun-solaris/3.3
203+- libgcc.a из /usr/local/gcc-3.3-32bit/lib/gcc-lib/sparc-sun-solaris/3.3
204+- набор файлов lib*.so из /usr/lib: libaio.so libmd5.so libc.so libelf.so librt.so libdl.so libm.so
249205
250-Я подозреваю что ошибся с выбранными .o файлами.
206+Иллюстрация проблемы при компиляции:
251207
252-## Для Mac OS X
208+` Free Pascal Compiler version 2.1.1 [2006/03/17] for sparc`\
209+` Copyright (c) 1993-2005 by Florian Klaempfl`\
210+` Target OS: Solaris for SPARC`\
211+` Compiling system.pp`\
212+` system.pp(15,1) Fatal: Syntax error, "BEGIN" expected but "identifier UNIT" found`
253213
254-Посмотрите этот [пост](<http://www.lazarus.freepascal.org/index.php?name=PNphpBB2&file=viewtopic&p=7222#7222>).
214+Я подозреваю что ошибся с выбранными .o файлами.
255215
256-
216+## Для Mac OS X
257217
218+Посмотрите этот [пост](http://www.lazarus.freepascal.org/index.php?name=PNphpBB2&file=viewtopic&p=7222#7222).
219+
258220## Авторы
259221
260-Эта страница была конвертирована из epikwiki [version](<http://lazarus-ccr.sourceforge.net/index.php?wiki=CrossCompilingForWin32UnderLinux>).
222+Эта страница была конвертирована из epikwiki [version](http://lazarus-ccr.sourceforge.net/index.php?wiki=CrossCompilingForWin32UnderLinux).
261223
262224---
263-*From the Free Pascal wiki, page "Cross compiling for Win32 under Linux/ru", as the Internet Archive kept it on 2024-10-04. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*
225+*From the Free Pascal wiki, page "Cross compiling for Win32 under Linux/ru", as it stood on 2021-07-20 after a change by Dbannon, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*
226+Category: Cross compilation/ru
227+Category: FPC/ru
228+Category: Lazarus/ru
229+Category: Russian

Back to history