HOWTO Кросскомпиляция

Материал из Gentoo Linux Wiki

Перейти к: навигация, поиск


Это — незавершённая статья. Вы можете помочь проекту, исправив и дополнив материал.

Содержание

[править] Зачем оно надо

Заставим distcc компилировать на других системах(архитектурах).

[править] Установка кросс-компилятора под Linux для другой платформы

[править] Установка crossdev

Для установки кросс-компиляторов в gentoo существует пакет crossdev:

emerge sys-devel/crossdev.

Далее необходимо настроить какой-либо PORTDIR_OVERLAY, например /usr/local/portage. Для этого необходимо создать директорию: /usr/local/portage и добавить строку PORTDIR_OVERLAY=/usr/local/portage в файл /etc/make.conf. Сделать это можно командами:

Code: root@localhost:~
mkdir /usr/local/portage
echo PORTDIR_OVERLAY=/usr/local/portage >> make.conf

crossdev -t i686 nptl nptlonly dev-libs/mpfr

[править] Настройка кросс-компилятора под Linux для Windows

Для компиляции Windows приложений под Linux необходимо установить XMinGW. Для этого необходимо следующее:

Code: root@localhost:~
emerge dev-util/xmingw-binutils
emerge dev-util/xmingw-runtime

После этого необходимо поставить пакеты:

Code: root@localhost:~
dev-util/xmingw-gcc
dev-util/xmingw-w32api
Примечание: Если установить dev-util/xmingw-gcc до emerge dev-util/xmingw-runtime то не будет скомпилирован компилятор для языка C++.

[править] Компиляция приложений

[править] Настройка distcc для работы с кросс-компилятором

Примечание: В данном разделе подразумевается, что distcc у Вас уже установлен. Как его установить можно прочитать в статье: HOWTO Ускорение компиляции при помощи distcc.

Как показала практика, distcc в поставке "из коробки" не использует кросс-компиляцию. Связано это со следующей особенностью его работы: он пытается вызвать на удаленной машине тот же компилятор, что и на локальной машине. То есть, например, если Вы вызвали на i686 компилятор командой "g++", то на удаленной машине (допустим, AMD64) он то же вызовет "g++", но этот "g++" будет уже под AMD64.

Для исправления этой проблемы надо обернуть distcc скриптом, подставляющим ему полное имя компилятора, включающего в себя название платформы. В данный момент речь идет о настройке distcc на клиентских машинах

После установки distcc символические ссылки должны были выглядеть примерно следующим образом:

Code: root@localhost:~
# cd /usr/lib/distcc/bin
# ls -l
total 10
drwxr-xr-x 2 root   root   4096 Июн  4 15:24 .
drwxr-xr-x 3 root   root   4096 Авг 23  2005 ..
lrwxrwxrwx 1 root   root     15 Авг 23  2005 c++ -> /usr/bin/distcc
lrwxrwxrwx 1 root   root     15 Авг 23  2005 cc -> /usr/bin/distcc
lrwxrwxrwx 1 root   root     15 Авг 23  2005 g++ -> /usr/bin/distcc
lrwxrwxrwx 1 root   root     15 Авг 23  2005 gcc -> /usr/bin/distcc
lrwxrwxrwx 1 root   root     15 Авг 23  2005 i686-pc-linux-gnu-c++ -> /usr/bin/distcc
lrwxrwxrwx 1 root   root     15 Авг 23  2005 i686-pc-linux-gnu-g++ -> /usr/bin/distcc
lrwxrwxrwx 1 root   root     15 Авг 23  2005 i686-pc-linux-gnu-gcc -> /usr/bin/distcc
Примечание: В данном конкретном случае у меня компьютер архитектуры i686-pc-linux-gnu. У Вас он может быть любой другой. Поэтому здесь и далее все i686-pc-linux-gnu надо заменить на название архитектуры вашего компьютера.

Первым делом удаляем старые сслыки:

rm c++ cc g++ gcc

Затем созаем скрипт-обертку:

Файл: /usr/lib/distcc/bin/i686-pc-linux-gnu-wrapper
#!/bin/bash
exec /usr/lib/distcc/bin/i686-pc-linux-gnu-g${0:$[-2]} "$@"
Файл: Выполним
# chmod a+x /usr/lib/distcc/bin/i686-pc-linux-gnu-wrapper

И создаем на него символические ссылки:

Code: root@localhost:/usr/lib/distcc/bin
# ln -s /usr/lib/distcc/bin/i686-pc-linux-gnu-wrapper c++
# ln -s /usr/lib/distcc/bin/i686-pc-linux-gnu-wrapper cc
# ln -s /usr/lib/distcc/bin/i686-pc-linux-gnu-wrapper g++
# ln -s /usr/lib/distcc/bin/i686-pc-linux-gnu-wrapper gcc

В результате мы должны получить следующую картину:

Code: root@localhost:~
# cd /usr/lib/distcc/bin
# ls -l
total 11
drwxr-xr-x 2 root   root   4096 Июн  4 15:24 .
drwxr-xr-x 3 root   root   4096 Авг 23  2005 ..
lrwxrwxrwx 1 root   root     25 Июн  4 15:22 c++ -> i686-pc-linux-gnu-wrapper
lrwxrwxrwx 1 root   root     25 Июн  4 15:22 cc -> i686-pc-linux-gnu-wrapper
lrwxrwxrwx 1 root   root     25 Июн  4 15:22 g++ -> i686-pc-linux-gnu-wrapper
lrwxrwxrwx 1 root   root     25 Июн  4 15:22 gcc -> i686-pc-linux-gnu-wrapper
lrwxrwxrwx 1 root   root     15 Авг 23  2005 i686-pc-linux-gnu-c++ -> /usr/bin/distcc
lrwxrwxrwx 1 root   root     15 Авг 23  2005 i686-pc-linux-gnu-g++ -> /usr/bin/distcc
lrwxrwxrwx 1 root   root     15 Авг 23  2005 i686-pc-linux-gnu-gcc -> /usr/bin/distcc
-rwxr-xr-x 1 root   root     72 Июн  4 15:24 i686-pc-linux-gnu-wrapper

[править] Ссылки

Личные инструменты