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

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

1 ответ

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

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

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

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

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

Другие вопросы по тегам