Обычно хорошей идеей является создание кросс-цепочки инструментов, в которой используется та же версия 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 .