ARDUINO Ошибки линковки

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,281
947
58
Марий-Эл
Доброго времени суток.
С Arduino IDE решил перейти на PlatformIO. Но что то где то недопонимаю.
Переношу код из под Arduino. Если его просто импортировать, то всё работает и компилится. Если пытаться писать этот же код как С++, начинают лезть ошибки.

Сам текст ошибки:
.pio\build\nanoatmega328\src\main.cpp.o (symbol from plugin): In function `enc1':
(.text+0x0): multiple definition of `enc1'
.pio\build\nanoatmega328\src\MainEncoder.cpp.o (symbol from plugin): (.text+0x0): first defined here


И исходный код:

Main.cpp

#include <Arduino.h>
#include <MainEncoder.h>
void setup()
{
enc1.setTickMode(AUTO); // Запускаем опрос енкодера
Serial.begin(9600); // Временно. Для отладки
Serial.println("Test OK");
}
/*=========================================================
* Основной цикл *
* =======================================================*/
void loop()
{
enc1.tick();
if (enc1.isTurn()) Serial.println("Поворот");
if (enc1.isPress()) Serial.println("Нажатие");
}


MainEncoder.h

#ifndef MainEncoder_h
#define MainEncoder_h

#include <Arduino.h>
#include <GyverEncoder.h>

#define CLK 5
#define DT 4
#define SW 12

Encoder enc1(CLK, DT, SW, TYPE2);

void EncoderInit(void);

#endif

MainEncoder.cpp

#include <MainEncoder.h>
#include <Arduino.h>

void EncoderInit(void)
{
enc1.setTickMode(AUTO);
}


Может нужно указывать какие то другие опции компиляции или линковки. Или как то по другому описывать классы.
 

Syorito Hatsuki`

✩✩✩✩✩✩✩
23 Сен 2019
4
0
Finland, Oulu
fstudio.space
Для PlatformIO это обычное дело, лично сталнулся с похожей проблемой в библиотеки FastLED. Так не как и не смог найти решения
 

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,281
947
58
Марий-Эл
Мне кажется, это не сам platformIO виноват. Он просто вызывает компилятор и линковщик. Здесь или опция компиляции или опция линковки какая то нужна дополнительная. Или класс по другому как то описывается. Ощущение такое, как будто линковщик к функции main не может подцепить объект описанный в mainencoder.h
 

Syorito Hatsuki`

✩✩✩✩✩✩✩
23 Сен 2019
4
0
Finland, Oulu
fstudio.space
Мне кажется, это не сам platformIO виноват. Он просто вызывает компилятор и линковщик. Здесь или опция компиляции или опция линковки какая то нужна дополнительная. Или класс по другому как то описывается. Ощущение такое, как будто линковщик к функции main не может подцепить объект описанный в mainencoder.h
Я больше с клоняюсь к тому что это ошибка синтекса PlatformIO
 

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,281
947
58
Марий-Эл