Сообщение compilation terminated. exit status 1 при загрузке скетча в Arduino Uno означает, что компилятор avr-gcc остановился на этапе сборки и не смог создать прошивку — до платы код даже не дошёл. Сама по себе строка «exit status 1» лишь сигнализирует о неудаче: настоящая причина всегда находится выше в окне вывода Arduino IDE, обычно в строках, выделенных оранжевым или красным цветом. Поэтому первое действие — прокрутить лог компиляции вверх и найти конкретное сообщение об ошибке.
Чаще всего проблема сводится к отсутствующей библиотеке, опечатке в коде или неверно выбранной плате. Ниже разберём, как читать лог ошибок, какие причины встречаются чаще всего и как их устранить по шагам.
Как читать лог компиляции Arduino IDE
Строка exit status 1 — это итог, а не диагноз. Реальная подсказка расположена на несколько строк выше и обычно выглядит как error: ... с указанием файла и номера строки. Например, запись sketch_oct12a.ino:5:10: fatal error: DHT.h: No such file or directory прямо говорит, что компилятор не нашёл файл DHT.h.
Чтобы видеть больше деталей, включите подробный вывод: откройте Файл → Настройки и отметьте галочки Показать подробный вывод напротив пункта «компиляция». После этого в консоли появится полный путь к проблемному файлу и точная строка кода, где компилятор остановился.
Обращайте внимание на первую ошибку в списке, а не на последнюю. Одна опечатка в начале скетча часто порождает десяток «производных» ошибок ниже, и исправление первой автоматически убирает остальные.
Отсутствующая библиотека — самая частая причина
Если в логе встречается фраза No such file or directory рядом с именем файла в угловых скобках или кавычках, значит Arduino IDE не может найти подключаемую библиотеку. Это происходит, когда библиотека просто не установлена, установлена в неправильную папку или её название в директиве #include написано с ошибкой.
Порядок действий в этом случае:
- 🔎 Откройте
Скетч → Подключить библиотеку → Управление библиотекамии найдите нужную библиотеку по имени из строки#include. - 📦 Установите библиотеку, затем полностью перезапустите Arduino IDE, чтобы среда проиндексировала новые файлы.
- ✍️ Проверьте точное написание имени заголовочного файла:
#include <DHT.h>и#include <dht.h>— не одно и то же. - 📁 Если библиотека устанавливалась вручную из ZIP-архива, убедитесь, что она лежит в папке
Документы/Arduino/librariesи внутри нет лишнего вложенного каталога с тем же именем.
Ошибки синтаксиса в самом скетче
Вторая большая группа причин — опечатки в коде. Компилятор сообщает о них фразами вроде expected ';' before..., was not declared in this scope или redefinition of.... Такие ошибки возникают из-за пропущенной точки с запятой, незакрытой фигурной скобки, использования переменной до её объявления или конфликта имён функций.
Типичные ситуации, которые стоит проверить в первую очередь:
- 🔤 Пропущена точка с запятой в конце строки — компилятор при этом часто указывает на следующую строку, что сбивает с толку.
- 🧱 Количество открывающих и закрывающих фигурных скобок не совпадает — помогает автоформатирование через
Инструменты → Автоформатирование. - 🔡 Регистр букв:
Serial.beginиserial.begin— разные идентификаторы, язык C++ чувствителен к регистру. - 📋 Код скопирован с веб-страницы вместе с «умными» кавычками или невидимыми символами — перепечатайте проблемные строки вручную.
Если ошибка указывает на строку, где визуально всё правильно, почти всегда проблема находится строкой выше — проверьте завершение предыдущей инструкции.
Неверно выбранная плата или устаревшее ядро
Компилятор собирает прошивку под конкретный микроконтроллер, и если в среде выбрана не та плата, часть регистров и констант окажется неизвестной. Для Arduino Uno в меню Инструменты → Плата должно быть выбрано именно Arduino Uno из раздела Arduino AVR Boards.
Если пакет поддержки AVR-плат повреждён или устарел, помогает переустановка: откройте Инструменты → Плата → Менеджер плат, найдите Arduino AVR Boards и нажмите «Обновить» либо удалите и установите заново. После этого снова выберите Uno и попробуйте скомпилировать пустой скетч-заготовку, чтобы отделить проблемы среды от проблем кода.
⚠️ Внимание: не путайте ошибку компиляции с ошибкой загрузки. Если в логе естьavrdude: stk500_recv()илиprogrammer is not responding, скетч уже скомпилировался, а сбой произошёл при передаче прошивки — это решается проверкой порта, кабеля и драйвера, а не правкой кода.
Пошаговая инструкция по устранению ошибки
Действуйте от простого к сложному — так вы быстрее локализуете источник сбоя и не потратите время на лишние переустановки.
☑️ Диагностика exit status 1 для Arduino Uno
Логика такой проверки проста: если пустой скетч компилируется без ошибок, среда и плата в порядке, и проблема точно в вашем коде или библиотеках. Если же даже BareMinimum не собирается, переустанавливайте пакет AVR-плат или саму Arduino IDE.
Что делать, если не компилируется даже пустой скетч
Удалите пакет Arduino AVR Boards через Менеджер плат и установите его заново. Если это не помогло, переустановите Arduino IDE, предварительно сохранив свои скетчи и сторонние библиотеки из папки Документы/Arduino. В редких случаях мешает антивирус, блокирующий запуск компилятора avr-gcc — временно добавьте папку Arduino в исключения и проверьте снова.
Сводная таблица типичных сообщений и решений
| Текст ошибки в логе | Вероятная причина | Что делать |
|---|---|---|
No such file or directory | Библиотека не установлена или имя указано с ошибкой | Установить библиотеку через Менеджер библиотек, проверить написание |
expected ';' before... | Пропущена точка с запятой | Проверить строку выше указанной |
was not declared in this scope | Переменная или функция не объявлена | Объявить идентификатор до использования, проверить регистр |
redefinition of 'void setup()' | Функция setup() или loop() встречается дважды | Объединить дубликаты в одну функцию |
Sketch too big | Код не помещается во флеш-память ATmega328P | Удалить лишние библиотеки, оптимизировать код |
Отдельно стоит упомянуть ошибку Sketch too big: у Arduino Uno объём флеш-памяти ограничен, и часть его занимает загрузчик. Если скетч с несколькими тяжёлыми библиотеками не влезает, уберите неиспользуемые #include, замените громоздкие конструкции и по возможности сократите объём строковых данных.
⚠️ Внимание: при копировании кода из интернета проверяйте, под какую плату он написан. Скетчи для ESP8266 или ESP32 используют другие библиотеки и регистры и на Uno заведомо не скомпилируются без адаптации.
Когда ошибка появилась «сама», без изменений кода
Бывает, что вчера скетч загружался нормально, а сегодня появляется exit status 1. Возможные причины: обновление Arduino IDE или пакета плат, изменение API библиотеки после её обновления, случайное сохранение скетча с опечаткой или конфликт после установки новой библиотеки с пересекающимися именами файлов.
Начните с отката последних изменений: вспомните, что обновлялось, и верните прежнюю версию библиотеки через Менеджер библиотек — там можно выбрать конкретную версию из выпадающего списка. Если скетч хранится в нескольких копиях, убедитесь, что открыта именно рабочая версия файла.
Часто задаваемые вопросы
Что означает exit status 1 в Arduino IDE?
Это код возврата компилятора, означающий, что сборка завершилась с ошибкой. Сама строка не содержит причины — конкретное описание ищите выше в окне вывода, в строках со словом error.
Почему библиотека установлена, но пишет No such file or directory?
Возможные причины: имя файла в #include отличается от реального, библиотека лежит не в папке Документы/Arduino/libraries, внутри есть лишний вложенный каталог или IDE нужно перезапустить для индексации. Также проверьте, нет ли двух конфликтующих копий библиотеки.
Компилятор указывает на строку, где ошибки нет. Что делать?
Компилятор замечает проблему с опозданием: пропущенная точка с запятой или скобка обычно находится на строку выше указанной. Проверьте завершение предыдущих инструкций и баланс фигурных скобок.
Может ли ошибка быть связана с USB-кабелем или портом?
Нет, exit status 1 — это ошибка именно компиляции, до передачи данных на плату дело не доходит. Кабель и порт имеет смысл проверять только при ошибках загрузки, где фигурирует avrdude.
Нужно ли переустанавливать Arduino IDE при этой ошибке?
Только в крайнем случае. Сначала проверьте код, библиотеки и выбранную плату. Переустановка оправдана, если даже пустой скетч не компилируется и переустановка пакета AVR Boards не помогла.