Требования к кросс-компиляции для C - PullRequest
7 голосов
/ 08 ноября 2010

У меня есть некоторые базовые знания о компиляции C, но мне нужно ответить на пару общих вопросов кросс-компиляции. В моем случае я пытаюсь выполнить кросс-компиляцию программы на моем компьютере Fedora Linux, которая будет работать на одноплатном компьютере ARM.

  1. Мой первый вопрос о заголовках. Я скачал пакет инструментов Linux arm, и он содержит файлы заголовков, такие как stdio.h, в каталоге include. Должен ли я использовать этот «целевой» каталог включения, в отличие от моих системных каталогов включения, когда я кросс-компилирую? Или можно указывать на директории include моей системы, такие как / usr / include? (Эти файлы заголовков кажутся разными, когда я их различаю.)

  2. Что происходит, если заголовочный файл не существует. В моем случае я также планирую использовать библиотеку cURL на плате ARM. Могу ли я просто указать на каталог include, присутствующий в загруженном пакете исходного кода, не беспокоясь о целевой архитектуре? Если да, значит ли это, что мой первый вопрос не имеет значения?

  3. Допустим, я хочу статически связать библиотеку. Нужно ли скомпилировать эту статическую библиотеку для целевой платформы ARM, прежде чем это произойдет? Или я могу использовать статические библиотеки, установленные в моей системе напрямую (в надежде, что процесс кросс-компиляции позаботится о бизнесе)?

  4. Если я решу динамически связываться с библиотекой, единственным требованием будет то, чтобы целевая система имела эту библиотеку, скомпилированную для ARM и установленную в одном из каталогов LD_LIBRARY_PATH на плате ARM, я прав?

Спасибо за помощь.

Ответы [ 2 ]

10 голосов
/ 08 ноября 2010
  1. Всегда используйте целевые заголовки. Они могут отличаться от заголовков вашего хоста. Компилятор уже должен иметь их как часть пути включения по умолчанию для стандартной проблемы, такой как libc.
  2. Вам нужно будет собрать cURL с использованием кросс-компилятора в поддельном «целевом» системном каталоге, и собрать ваше приложение с помощью cURL в этом конечном каталоге. Поскольку вам также нужна библиотека cURL, вы ДОЛЖНЫ использовать кросс-компилятор. Для компиляций, которые не подходят для кросс-компиляции (например, сборка программ и запуск их как часть компиляции), вам нужно будет изменить процесс сборки. Иногда fakeroot может быть полезно для грязных систем сборки.
  3. Вы не можете произвольно использовать статическую библиотеку для архитектуры, отличной от вашей системы. Они должны быть построены кросс-компилятором.
  4. Неправильно. Библиотека обычно должна присутствовать.
3 голосов
/ 08 ноября 2010

Любая библиотека, которую вы собираетесь использовать, включая libc, должна быть собрана для целевой платформы, прежде чем вы сможете ссылаться на нее.Используйте заголовки назначения вместо заголовков хоста для сборки, чтобы вы могли использовать правильный API.

...