У меня есть установленный на нем малиновый PI с Emdebian и вы хотите перекрестно скомпилировать проекты.Сочетание существующих rootfs с пользовательской инструментальной цепочкой
Существует множество документации о том, как получить инструментальную цепочку и построить с ней простой проект. Я сам сумел построить toolchain с crosstool-ng и написал программу hello world, которая отлично работает.
То, что я не получаю, - это то, как обращаться с кросс-компиляцией более сложных проектов, таких как Qt, которые имеют зависимости от других библиотек. Давайте используем в качестве примера libdbus, так как это одна из зависимостей Qt.
Установленный Emdebian уже содержит libdbus.so, поэтому, естественно, я бы предпочел использовать это вместо перекрестной компиляции моего собственного libdbus.so, поскольку для компиляции всех зависимостей Qt потребуется много времени.
Для кросс-компиляции, есть две важные каталоги, насколько я понимаю:
- «постановка» каталог, в котором живут все установленные библиотеки и приложения. Сначала это копия каталога sysroot toolchain и заполняется большим количеством библиотек, поскольку они перекрестно скомпилированы.
- «rootfs» каталог, который эквивалентен тому, что находится на устройстве - по существу, копия промежуточного каталога без ненужных материалов, таких как документация и файлы заголовков. Насколько я понимаю, наилучшим подходом является копирование необходимых файлов из промежуточного каталога в rootfs.
Получение каталога rootfs прост, так как это может быть монтирование NFS с устройства. Но как мне получить промежуточную директорию для существующей установки Emdebian в PI? В промежуточном каталоге должны быть включены такие элементы, как заголовки dbus, которые не установлены на корневой папке.
Некоторые люди просто устанавливают заголовки dbus на устройстве, используя apt-get install libdbus-dev, а затем используйте rootfs в качестве промежуточного каталога. С этой установкой больше нет различий между корневыми файлами и стадией, при этом недостаток в том, что rootfs загрязнены заголовками, документацией и т. Д. Преимущество, конечно, в том, что это легко.
Каков наилучший способ получить заголовки dbus в моем промежуточном каталоге на моей главной машине? Каков обычный подход, который люди используют в этой ситуации?
В качестве побочного вопроса, почему подход получения инструментальной цепочки, компиляции программы и последующего копирования на целевую работу вообще? Инструментальная цепочка отправляет свои собственные версии libc, libstdC++ и т. Д., Не являются ли они несовместимыми с версиями, которые установлены на целевом компьютере? Особенно при создании пользовательской инструментальной цепочки, скомпилированной с помощью crosstool-ng?
(Обратите внимание, что я не спрашиваю, как скомпилировать Qt, я могу понять, что из себя. Мой вопрос является более общим, о подходе принять при объединении пользовательского набора инструментов с существующей установки/корневой файловой системы)
Awesome, debootstrap - именно то, что я искал. Получил немного, чтобы работать на OpenSuSE, но, в конце концов, это прекрасно :) –