Я нахожусь в процессе переноса кода, написанного для компиляции для одного чипа, в другой чип.
Одна проблема, которая возникает, - это множество ошибок определения.Некоторые из них, по-видимому, связаны с компоновщиком первого чипа, что позволяет мне лениво объявлять переменные extern, когда они будут использоваться в нескольких исходных файлах.Раньше я вообще не использовал extern (объявлял и определял переменную в нечто .h, использовал ее во что-то .cpp и других исходных файлах, которые включали что-то .h), и это компилировалось и связывалось превосходно.
Я считаю, что эти проблемы исправлены достаточно хорошо: теперь мои общие переменные имеют следующий шаблон:
Something.h
extern int foo;
Something.cpp
int foo = 0;
//using foo to do stuff
Main.cpp
#include "Something.h"
//using foo to do stuff
Все хорошо.
Вот кое-что, что я не понимаю, и, похоже, не могу найти ответы здесь или в Google.Я заметил, что те же самые множественные ошибки определения вызваны переменными, которые объявлены и определены в Something.h и использовали only в Something.cpp.
Something.h имеет защиту включения,так что я не думаю, что это связано с тем, что Something.h несколько раз был включен в мою программу.
Ошибка исчезнет, если я объявлю ее как extern и определю ее в файле cpp, но это неправильномне.Я полагаю, что extern не нужен для связи переменной между Something.h и Something.cpp.
Любой совет был бы очень признателен, я бы очень хотел понять, чего мне здесь не хватает.
(Кстати, я компилирую для ESP32, используя Arduino IDE.)