avr-gcc (WinAVR): поиск и устранение ошибок при компиляции и линковке
Написал microsin   
05.06.2011

Здесь приведены некоторые методы поиска и устранения ошибок компиляции и линковки в пакете avr-libc/avr-gcc (WinAVR). 

1. Подсказка по командной строке компилятора высвечивается командой:
avr-gcc --help

2. Нужно удалить старые пути запуска из переменной окружения Path. Если на компьютере переустанавливался WinAVR (например, раньше был WinAVR-20080610, а теперь стал WinAVR-20100110), то необходимо ОБЯЗАТЕЛЬНО очистить переменную окружения %Path% от старых путей, иначе пути включаемых файлов include будут вычисляться компилятором gcc неправильно. Нельзя допускать, чтобы старые пути WinAVR соседствовали в %Path% с новыми, даже если новые пути идут первыми. Например, из-за этого глюка я долго не мог разобраться, почему компилятор и линковщик никак не могут найти функцию eeprom_update_byte. Для проверки, какие реально включаемые пути использует компилятор (где он ищет h-файлы), используйте опцию -print-search-dirs (см. пункт 4).

3. Операторы условной компиляции. Для разборок с запутанными операторами условной компиляции (#ifdef, #ifndef, #else и проч.) удобно использовать директивы #warning "сообщение" и #error "сообщение". Они позволяют точно определить, какую ветку в исходном тексте компилятор просмотрел, а какую отбросил.

4. Пути поиска заголовков компилятором. Когда непонятно, почему не включается какой-нибудь заголовочный файл, удобно воспользоваться опцией -print-search-dirs, которая показывает пути поиска компилятором файлов. Эту опцию можно добавить в makefile к общим флагам компилятора, например так:
ALL_CFLAGS += -print-search-dirs

 

Последнее обновление ( 05.06.2011 )