Настройка среды кросс-компиляции для конкретной целевой платформы - PullRequest
3 голосов
/ 25 февраля 2010

Я бы хотел настроить среду кросс-компиляции на Ubuntu 9.10. Из документов, которые я прочитал ( эти единицы , например ), это включает в себя компиляцию цепочки инструментов целевых платформ.

Мой вопрос: как вы определяете требуемую версию каждого из пакетов в цепочке инструментов для конкретной целевой платформы? Могу ли я следовать эмпирическому правилу?

Это список найден на одном из сайтов, на которые ссылаются выше:

Binutils-2.16.1.tar.bz2
линукс-2.6.20.1.tar.bz2
Glibc-2.5.tar.bz2
GlibC-LinuxThreads-2.5.tar.bz2
НКА-ядро-4.2.0.tar.bz2
GCC-г ++ - 4.2.0.tar.bz2

Но предположим, что я хочу сгенерировать исполняемые файлы для стандартных коробок Ubuntu 8.04 и CentOS 5.3. Каковы необходимые пакеты?

Моя основная задача - избегать ошибок типа "/usr/lib/libstdc++.so.6: версия` GLIBCXX_3.4.11 'не найдена "на машинах клиентов, но в будущем я хочу работать и с различными архитектурами. .

Ответы [ 4 ]

4 голосов
/ 25 февраля 2010

Обычно хорошей идеей является создание кросс-цепочки инструментов, в которой используется та же версия libc (и других библиотек), которая есть в целевой системе. Это особенно важно в случае библиотек, которые используют версионные символы, или вы можете столкнуться с ошибками типа "/usr/lib/libstdc++.so.6: версия 'GLIBCXX_3.4.11' not found".

Та же архитектура

Для генерации исполняемых файлов для стандартных систем Ubuntu 8.04 и CentOS 5.3 вы можете установить дистрибутивы на виртуальных машинах и выполнить необходимую компиляцию из виртуальной машины, чтобы гарантировать, что полученные двоичные файлы совместимы с версиями библиотек из каждого дистрибутива.

Другой вариант - настроить среды сборки chroot вместо виртуальных машин для целевых дистрибутивов.

Вы также можете создавать наборы инструментов, предназначенные для разных сред (разных версий библиотек), и собирать их в своей среде Ubuntu 9.10, не используя виртуальные машины или среды chroot. Я использовал crosstool Дэна Кегеля для создания таких кросс-инструментальных цепочек.

Другая архитектура

Как я уже отмечал в своем ответе на другой вопрос о кросс-компиляторе, я использовал crosstool Дэна Кегеля для создания моей перекрестной цепочки инструментов.

Похоже, что он может быть немного устаревшим, но есть матрица результатов сборки для различных архитектур, чтобы помочь определить подходящую комбинацию заголовков ядра gcc, glibc, binutils и linux.

Требуемые версии пакета

По моему опыту, на самом деле не существует большого правила. Не все комбинации заголовков gcc, binutils, glibc и linux будут скомпилированы успешно. Даже если сборка завершается, для проверки успешности сборки необходим некоторый уровень тестирования. Иногда это делается путем компиляции ядра Linux с вашим новым кросс-инструментарием. В зависимости от целевой системы и архитектуры для успешной сборки может потребоваться некоторое исправление исходного кода.


Поскольку вы настраиваете эту среду кросс-компиляции в Ubuntu 9.10, вы можете захотеть взглянуть на пакет dpkg-cross .

2 голосов
/ 02 марта 2010

Мой вопрос: как вы определяете требуемая версия каждого из пакеты в наборе инструментов для конкретная целевая платформа? ... Binutils-2.16.1.tar.bz2 НКА-ядро-4.2.0.tar.bz2 GCC-г ++ - 4.2.0.tar.bz2

Как правило, выбирайте последнюю стабильную версию: они влияют только на вашу локальную цепочку инструментов, а не на время выполнения.

линукс-2.6.20.1.tar.bz2

Тебе это не нужно. (Для таргетинга на встроенные платформы вы можете использовать его.)

Glibc-2.5.tar.bz2 GlibC-LinuxThreads-2.5.tar.bz2

Тебе это не нужно. То есть Вы не должны загружать их или создавать их; вам следует ссылаться на версии из самого старого дистрибутива, который вы хотите поддерживать.

Есть ли эмпирическое правило я могу следовать? Но предположим, что я хочу создать исполняемые файлы для стандартного Ubuntu 8.04 и CentOS 5.3 коробки. Каковы необходимые пакеты?

Вы исследуете дистрибутивы, на которые хотите ориентироваться, находите версии с наименьшим общим знаменателем libc, libstdc ++, pthreads и любой другой совместно используемой библиотеки, с которой вы будете связывать, затем скопируйте эти библиотеки и соответствующие заголовки из коробки с этими версиями LCD в ваш набор инструментов [править] Я должен уточнить, вы действительно хотите получить все зависимые библиотеки из одной системы. Выбор и выбор ЖК-дисплея каждой версии файла из различных дистрибутивов - это рецепт быстрого путешествия в ад зависимости.

2 голосов
/ 25 февраля 2010

Компиляция для других дистрибутивов Linux проще всего установить их на виртуальных машинах (apt-get install kvm), а затем выполнить компиляцию изнутри. Вы также можете написать их, чтобы сделать это автоматически. Создание кросс-компилятора и предоставление точно таких же версий всех библиотек и таких, как в других дистрибутивах Linux, практически невозможно.

0 голосов
/ 25 февраля 2010

В зависимости от вашей целевой платформы вы рассматривали возможность использования Optware ?

В настоящее время я работаю над созданием Mono и Moonlight для моего Palm Pre с использованием набора инструментов кросс-компиляции (а файлы сборки Optware уже обрабатывают большинство зависимостей).

...