• Arduino + MPU6050 (библиотека i2cdevlib). Что делать с ошибками "Multiple definition of MPU6050::XXXXXX"?

    @osnwt
    Проблема - в некорректном написании библиотеки.

    По определению заголовочные файлы должны включать только описания функций и переменных, а cpp-файлы - их определения (реализацию). Включаемый файл MPU6050_6Axis_MotionApps20.h не является на самом деле заголовочным, он содержит реализацию функций, которая должна быть только в одном файле проекта. При включении же его дважды все функции будут скомпилированы в каждый объектный модуль, что вызовет ошибку на стадии линковки.

    Можно даже предположить, почему было сделано именно так: данный файл должен иметь тип cpp. Однако, в силу ограничений Arduino ВСЕ cpp файлы из каталога будут скомпилированы автоматически при том, что нужен лишь один из них (6Axis или 9Axis). Потому их сделали *.h, не учтя возможность повторного включения. Это можно было сделать корректно, но автор не стал утруждать себя такими "мелочами".

    Без правки библиотеки эту проблему не решить. Для этого надо разнести описание класса библиотеки в выбранном варианте в *.h, а его определение - в *.cpp. И неким образом учесть то, какой из вариантов при этом следует собирать. В нормальной среде разработки было бы достаточно добавить в проект лишь один (нужный) *.cpp с реализацией того или иного варианта. В стандартой среде Arduino этого сделать нельзя (оба cpp будут скомпилированы), и надо извращаться, например, разделив библиотеку на две части или по другому. В результате из-за дурацких ограничений среды вместо решения своей задачи приходится думать, как выкрутиться. Увы.

    PS. Мое личное мнение об Arduino: признавая достоинства системы в плане популяризации микроконтроллеров в "массах", реализация ее, на мой взгляд, никуда не годная и прививающая навыки плохого стиля программирования. Простейшим примером этого является постоянно повторяемое во всех официальных примерах int led = 13, когда среда уже давным давно определяет его как LED_BUILTIN, всегда правильный для ВЫБРАННОЙ платы. Из таких "мелочей" складывается то, что люди пишут интересные, в целом, вещи, но делают это как попало, что не может не печалить. И сама среда прививает им такой стиль.
    Ответ написан