arm gcc по умолчанию компилирует свою libc

Я пытаюсь скомпилировать SDK со встроенным компилятором gcc в cygwin. Это SDK на основе makefile. Моя цель — устройство Cortex m3. Моя проблема в том, что SDK имеет собственную реализацию libc для цели, и когда я компилирую с помощью компилятора arm (arm-none-eabi-gcc), он пытается подобрать libc gnu arm, а не SDK libc. Это приводит к ошибке компиляции. Я уверен, что make-файлы верны (я скопировал и вставил весь SDK с компьютера, на котором это работало). У меня больше нет доступа к этому компьютеру, чтобы попытаться проверить или сравнить настройки. Я не знаю, как запретить компилятору arm gcc искать собственную реализацию libc и вместо этого указать ему правильную реализацию. Любая помощь приветствуется.


person Ryan    schedule 12.02.2016    source источник
comment
Вероятно, в вашем SDK есть скрипт, который устанавливает все переменные среды для использования с кросс-компилятором gcc. Что-то, что вы должны запустить с помощью source setup environment. Это установит параметры цепочки инструментов, sysroot и т. д.   -  person LPs    schedule 13.02.2016


Ответы (1)


Возможно есть два решения:

  1. Создайте среду, специфичную для вашего инструмента — набор инструментов GNU использует ряд переменных среды для определения поведения по умолчанию. Для пользовательской цепочки инструментов вам нужно будет установить все необходимые переменные, чтобы переопределить системные значения по умолчанию.
  2. Используйте параметр компоновщика -nostdlib и явно свяжите нужную библиотеку и код запуска среды выполнения C, чтобы ваша командная строка компоновщика могла включать следующее:

    -nostdlib -L/usr/myarmtools/gcc/lib -lc crt0.o

Обратите внимание, что -nostdlib подавляет связывание по умолчанию libc libstdc++ и crt0.o, поэтому вы должны указать путь поиска (-L) к библиотекам или явно связать их по их полному пути и имени файла и связать код объекта среды выполнения C для вашей цели. .

Я предпочитаю вариант 2, так как он будет работать в любой среде. Однако, если вы хотите использовать общие make-файлы для сборки нескольких целей, может оказаться полезным вариант 1.

person Clifford    schedule 13.02.2016