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 ответ
Есть, возможно, два решения:
- Создайте среду, специфичную для вашего инструмента - набор инструментов GNU использует ряд переменных среды для определения поведения по умолчанию. Для пользовательского набора инструментов вам нужно будет установить все необходимые переменные, чтобы переопределить системные значения по умолчанию.
Использовать
-nostdlib
Опция компоновщика и явно связывает вашу нужную библиотеку и код запуска C Runtime, так что ваша командная строка компоновщика может включать следующее:-nostdlib -L / usr / myarmtools / gcc / lib -lc crt0.o
Обратите внимание, что -nostdlib
подавляет связывание по умолчанию libc libstdC++ и crt0.o, поэтому вы должны указать пути поиска (-L) для библиотек или явно связать их по их полному пути и имени файла и связать объектный код времени выполнения C для вашей цели.
Я использую вариант 2 для предпочтения, так как он будет работать в любой среде. Однако, если вы хотите использовать общие make-файлы для сборки для нескольких целей, вариант 1 может быть полезен.