Где починить опции компилятора
- Войдите на сайт для отправки комментариев
Добрый день.
В разных версиях Ардуино IDE, по разному собираются скетчи, например в 1.8.7 и 1.8.11 данный пример компилируется, а в 1.8.10 - нет. Подскажите кто в курсе - в чем тут дело?
#include "LiquidCrystal_I2C.h" LiquidCrystal_I2C lcd( 0x27 , 16, 2); void setup() { } void loop() { lcd.command( 0x1 ); }
вывод в версии 1.8.10 C:\Users\az\AppData\Local\Temp\cdKJsozY.ltrans0.ltrans.o: In function `main': <artificial>:(.text.startup+0x12e): undefined reference to `LiquidCrystal_I2C::command(unsigned char)' <artificial>:(.text.startup+0x13a): undefined reference to `LiquidCrystal_I2C::command(unsigned char)' collect2.exe: error: ld returned 1 exit status Несколько библиотек найдено для "LiquidCrystal_I2C.h" Используется: C:\Users\az\Documents\Arduino\libraries\LiquidCrystal_I2C-master Несколько библиотек найдено для "Wire.h" Используется: C:\pro\arduino-1.8.10\hardware\arduino\avr\libraries\Wire exit status 1 Ошибка компиляции для платы Arduino/Genuino Mega or Mega 2560. вывод в версии 1.8.11 "C:\\pro\\arduino-1.8.11\\hardware\\tools\\avr/bin/avr-objcopy" -O ihex -R .eeprom "C:\\Users\\az\\AppData\\Local\\Temp\\arduino_build_226791/demo.ino.elf" "C:\\Users\\az\\AppData\\Local\\Temp\\arduino_build_226791/demo.ino.hex" Используем библиотеку LiquidCrystal_I2C-master версии 1.1.2 из папки: C:\Users\az\Documents\Arduino\libraries\LiquidCrystal_I2C-master Используем библиотеку Wire версии 1.0 из папки: C:\pro\arduino-1.8.11\hardware\arduino\avr\libraries\Wire "C:\\pro\\arduino-1.8.11\\hardware\\tools\\avr/bin/avr-size" -A "C:\\Users\\az\\AppData\\Local\\Temp\\arduino_build_226791/demo.ino.elf" Скетч использует 2102 байт (0%) памяти устройства. Всего доступно 253952 байт. Глобальные переменные используют 206 байт (2%) динамической памяти, оставляя 7986 байт для локальных переменных. Максимум: 8192 байт.
Напишите первую строку правильно и не надо будет ничего чинить.
Хм.. я и не подумал в эту сторону, хотя в данном случае файлик все равно один, как не включай. Кстати, в 1.8.12 тоже не работает (
Linking everything together...
"C:\\pro\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-gcc" -Ofast -g -flto -fuse-linker-plugin -Wl,--gc-sections,--relax -mmcu=atmega2560 -o "C:\\Users\\az\\AppData\\Local\\Temp\\arduino_build_690439/demo.ino.elf" "C:\\Users\\az\\AppData\\Local\\Temp\\arduino_build_690439\\sketch\\demo.ino.cpp.o" "C:\\Users\\az\\AppData\\Local\\Temp\\arduino_build_690439\\libraries\\LiquidCrystal_I2C-master\\LiquidCrystal_I2C.cpp.o" "C:\\Users\\az\\AppData\\Local\\Temp\\arduino_build_690439\\libraries\\Wire\\Wire.cpp.o" "C:\\Users\\az\\AppData\\Local\\Temp\\arduino_build_690439\\libraries\\Wire\\utility\\twi.c.o" "C:\\Users\\az\\AppData\\Local\\Temp\\arduino_build_690439/core\\core.a" "-LC:\\Users\\az\\AppData\\Local\\Temp\\arduino_build_690439" -lm
C:\Users\az\AppData\Local\Temp\ccrKV8eB.ltrans0.ltrans.o: In function `loop':
<artificial>:(.text+0x868): undefined reference to `LiquidCrystal_I2C::command(unsigned char)'
collect2.exe: error: ld returned 1 exit status
Причем в библиотеке это описано как void command(uint8_t);
восьмую строчку перепишите как
Согласен, выглядит как решение, но к сожалению не работает.
Согласен, выглядит как решение, но к сожалению не работает.
и какие теперь ошибки?
Да Вы сами проверьте, почему-то только на нечетных версиях собирается. Возможно это какая то специальная особенность версий? Или где то надо покрутить чего?
AlloZawr - сделайте вот что - поменяйте плату ардуино в настройках, если сейчас стоит Мега - поставьте Уно. Запустите компиляцию. После окончания компиляции поменяйте плату обратно на мега, скомпилируйте снова. ошибка, скорее всего, пропадет.
У Вас получилось? Забавно... на какой версии IDE ?
У Вас получилось? Забавно... на какой версии IDE ?
АллоЗавр - у кого проблема - у меня или у вас? Вы попробовали то, что я сказал? и какие резульаты?
Да, конечно попробовал. И указал в первом сообщении вывод ошибки и способ её воспроизведения. Вы на какой версии проверяли?
Да, конечно попробовал. И указал в первом сообщении вывод ошибки и способ её воспроизведения. Вы на какой версии проверяли?
я ничего не проверял и проверять не собираюсь. Проверять тут - ваша работа, потому как повторяю - проблема у вас. Если вам лень выполнять то, что вам советуют - может и спрашивать не стоит?
В чем смысл вообще этого "исследования"? Если вы нашли версию, на которой софт работает - ее и используйте.
на этом прощаюсь.
на этом прощаюсь.
Пока. Не нервничайте по пустякам )
Мало ли у кого какие тараканы, мне вот этот порядком поднадоел и вдруг найдется решение получше чем версии перебирать.
вдруг найдется решение получше чем версии перебирать.
может дело не в версиях? странно почему я с 17 года ни разу Ардуину не переставлял? и ни разу не было чтобы хоть одна библиотека не собралась
У меня работает, я бы не советовал без проверки. Работает и в 10, и в 12, так что разбирайтесь что там у Вас криво стоит или на что прав не хватает.
Работает и в 10, и в 12, так что разбирайтесь что там у Вас криво стоит или на что прав не хватает.
... разбирайтесь что там у Вас криво стоит или на что прав не хватает.
Кто нибудь в курсе - можно ли какой лог получить при сборке? Кроме того что выводится внизу ?
Кто нибудь в курсе - можно ли какой лог получить при сборке? Кроме того что выводится внизу ?
Нет, то что выводится внизу и есть лог. Можно только настраивать "подробность" этого лога при компиляции и загрузке. В настройках ставятся соответствующие галочки.
При компиляции во временном каталоге Windows создаётся папочка, куда вместе с логами складывается всё, что Arduino IDE использует для данного скетча.
Спасибо, в эту папочку и заходил посмотреть, но вот как туда попадает всё - по прежнему не очень разбираюсь (
Да, ошибку воспроизводить научился, но результат не радует. Поменял ключи компиляции и по рекомендациям из темы http://arduino.ru/forum/obshchii/nastroika-kompilyatsii-v-arduino-ide смотрел как изменяется выходной файл библиотеки, при компиляции с ключом оптимизации -compiler.size_flags=-Ofast ошибка есть, с ключом по умолчанию compiler.size_flags=-oS данный пример собирается. Вроде бы все, проблема решена, но в реальной программе есть участки которые желательно собирать без оптимизации по размеру.
Думаю попробовать сборку через makefile, подскажите если кто пробовал - какие камни там ожидают и с чего стоит начать?
Так же помогает отключение директивы inline , тогда собирается с любым уровнем оптимизации