Где починить опции компилятора

AlloZawr
Offline
Зарегистрирован: 09.05.2020

Добрый день.

В разных версиях Ардуино 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 байт.

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Напишите первую строку правильно и не надо будет ничего чинить.

#include <LiquidCrystal_I2C.h>

 

AlloZawr
Offline
Зарегистрирован: 09.05.2020

Хм.. я и не подумал в эту сторону, хотя  в данном случае файлик все равно один, как не включай. Кстати, в 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);

b707
Offline
Зарегистрирован: 26.05.2017

восьмую строчку перепишите как

lcd.command((uint8_t) 0x1 );

 

AlloZawr
Offline
Зарегистрирован: 09.05.2020

Согласен, выглядит как решение, но к сожалению не работает.

b707
Offline
Зарегистрирован: 26.05.2017

AlloZawr пишет:

Согласен, выглядит как решение, но к сожалению не работает.

и какие теперь ошибки?

AlloZawr
Offline
Зарегистрирован: 09.05.2020

Да Вы сами проверьте, почему-то только на нечетных версиях собирается. Возможно это какая то специальная особенность версий?  Или где то надо покрутить чего?

b707
Offline
Зарегистрирован: 26.05.2017

AlloZawr - сделайте вот что - поменяйте плату ардуино в настройках, если сейчас стоит Мега - поставьте Уно. Запустите компиляцию. После окончания компиляции поменяйте плату обратно на мега, скомпилируйте снова. ошибка, скорее всего, пропадет.

AlloZawr
Offline
Зарегистрирован: 09.05.2020

У Вас получилось?  Забавно... на какой версии IDE ?

b707
Offline
Зарегистрирован: 26.05.2017

AlloZawr пишет:

У Вас получилось?  Забавно... на какой версии IDE ?

АллоЗавр - у кого проблема - у меня или у вас? Вы попробовали то, что я сказал? и какие резульаты?

AlloZawr
Offline
Зарегистрирован: 09.05.2020

Да, конечно попробовал. И указал в первом сообщении  вывод ошибки и способ её воспроизведения. Вы на какой версии проверяли?

b707
Offline
Зарегистрирован: 26.05.2017

AlloZawr пишет:

Да, конечно попробовал. И указал в первом сообщении  вывод ошибки и способ её воспроизведения. Вы на какой версии проверяли?

я ничего не проверял и проверять не собираюсь. Проверять тут - ваша работа, потому как повторяю - проблема у вас. Если вам лень выполнять то, что вам советуют - может и спрашивать не стоит?

В чем смысл вообще этого "исследования"? Если вы нашли версию, на которой софт работает - ее и используйте.

на этом прощаюсь.

AlloZawr
Offline
Зарегистрирован: 09.05.2020

b707 пишет:

на этом прощаюсь.

Пока. Не нервничайте по пустякам )

  Мало ли у кого какие тараканы, мне вот этот порядком поднадоел и вдруг найдется решение получше чем версии перебирать. 

 

 

b707
Offline
Зарегистрирован: 26.05.2017

AlloZawr пишет:

вдруг найдется решение получше чем версии перебирать. 

может дело не в версиях?  странно почему я с 17 года ни разу Ардуину не переставлял? и ни разу не было чтобы хоть одна библиотека не собралась

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

AlloZawr пишет:
Кстати, в 1.8.12 тоже не работает (

У меня работает, я бы не советовал без проверки. Работает и в 10, и в 12, так что разбирайтесь что там у Вас криво стоит или на что прав не хватает.

AlloZawr
Offline
Зарегистрирован: 09.05.2020

ЕвгенийП пишет:

Работает и в 10, и в 12, так что разбирайтесь что там у Вас криво стоит или на что прав не хватает.

Понятно, значит от версии IDE не все зависит. 

ЕвгенийП пишет:

... разбирайтесь что там у Вас криво стоит или на что прав не хватает.

  Разбираемся, пока правда подмывает плюнуть  и оставить как есть  ))

Кто нибудь в курсе - можно ли какой лог получить при сборке?  Кроме того что выводится внизу ?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

AlloZawr пишет:

Кто нибудь в курсе - можно ли какой лог получить при сборке?  Кроме того что выводится внизу ?

Нет, то что выводится внизу и есть лог. Можно только настраивать "подробность" этого лога при компиляции и загрузке. В настройках ставятся соответствующие галочки.

arduinec
Offline
Зарегистрирован: 01.09.2015

AlloZawr пишет:
Кто нибудь в курсе - можно ли какой лог получить при сборке?  Кроме того что выводится внизу?

При компиляции во временном каталоге Windows создаётся папочка, куда вместе с логами складывается всё, что Arduino IDE использует для данного скетча.

AlloZawr
Offline
Зарегистрирован: 09.05.2020

Спасибо, в эту папочку и заходил посмотреть, но вот как туда попадает всё - по прежнему не очень разбираюсь (

Да, ошибку воспроизводить научился, но результат не радует.  Поменял ключи компиляции и по рекомендациям из темы http://arduino.ru/forum/obshchii/nastroika-kompilyatsii-v-arduino-ide смотрел как изменяется выходной файл библиотеки, при компиляции с ключом оптимизации -compiler.size_flags=-Ofast ошибка есть, с ключом по умолчанию compiler.size_flags=-oS  данный пример собирается. Вроде бы все, проблема решена, но в реальной программе есть участки которые желательно собирать без оптимизации по размеру.

Думаю попробовать сборку через makefile, подскажите если кто пробовал - какие камни там ожидают и с чего стоит начать?

AlloZawr
Offline
Зарегистрирован: 09.05.2020

Так же помогает отключение директивы inline , тогда собирается с любым уровнем оптимизации

//inline
void LiquidCrystal_I2C::command(uint8_t value) {
	send(value, 0);
}