Сообщение об ошибке - требуется помощь
Как многие из вас знают (если вы читали мою биографию или просто читали мои предыдущие вопросы), я пытаюсь построить ракету. Код шел хорошо, но как только я разделил свои объекты на 2 файла, файл .h
и .
cpp, появилось это сообщение об ошибке.
Полный код находится на GitHub, потому что он просто слишком длинный!
Вот сообщение об ошибке :
Arduino: 1.8.1 (Windows 7), Board: "Arduino Pro or Pro Mini, ATmega328 (5V, 16 MHz)"
sketch\vehicle.ino.cpp.o (symbol from plugin): In function `Fins':
(.text+0x0): multiple definition of `MPU6050::dmpInitialize()'
sketch\Gyroscope.cpp.o (symbol from plugin):(.text+0x0): first defined here
sketch\vehicle.ino.cpp.o (symbol from plugin): In function `Fins':
(.text+0x0): multiple definition of `MPU6050::dmpPacketAvailable()'
sketch\Gyroscope.cpp.o (symbol from plugin):(.text+0x0): first defined here
sketch\vehicle.ino.cpp.o (symbol from plugin): In function `Fins':
(.text+0x0): multiple definition of `MPU6050::dmpGetAccel(long*, unsigned char const*)'
sketch\Gyroscope.cpp.o (symbol from plugin):(.text+0x0): first defined here
sketch\vehicle.ino.cpp.o (symbol from plugin): In function `Fins':
(.text+0x0): multiple definition of `MPU6050::dmpGetAccel(int*, unsigned char const*)'
sketch\Gyroscope.cpp.o (symbol from plugin):(.text+0x0): first defined here
sketch\vehicle.ino.cpp.o (symbol from plugin): In function `Fins':
(.text+0x0): multiple definition of `MPU6050::dmpGetAccel(VectorInt16*, unsigned char const*)'
sketch\Gyroscope.cpp.o (symbol from plugin):(.text+0x0): first defined here
sketch\vehicle.ino.cpp.o (symbol from plugin): In function `Fins':
(.text+0x0): multiple definition of `MPU6050::dmpGetQuaternion(long*, unsigned char const*)'
sketch\Gyroscope.cpp.o (symbol from plugin):(.text+0x0): first defined here
sketch\vehicle.ino.cpp.o (symbol from plugin): In function `Fins':
(.text+0x0): multiple definition of `MPU6050::dmpGetQuaternion(int*, unsigned char const*)'
sketch\Gyroscope.cpp.o (symbol from plugin):(.text+0x0): first defined here
sketch\vehicle.ino.cpp.o (symbol from plugin): In function `Fins':
(.text+0x0): multiple definition of `MPU6050::dmpGetQuaternion(Quaternion*, unsigned char const*)'
sketch\Gyroscope.cpp.o (symbol from plugin):(.text+0x0): first defined here
sketch\vehicle.ino.cpp.o (symbol from plugin): In function `Fins':
(.text+0x0): multiple definition of `MPU6050::dmpGetGyro(long*, unsigned char const*)'
sketch\Gyroscope.cpp.o (symbol from plugin):(.text+0x0): first defined here
sketch\vehicle.ino.cpp.o (symbol from plugin): In function `Fins':
(.text+0x0): multiple definition of `MPU6050::dmpGetGyro(int*, unsigned char const*)'
sketch\Gyroscope.cpp.o (symbol from plugin):(.text+0x0): first defined here
sketch\vehicle.ino.cpp.o (symbol from plugin): In function `Fins':
(.text+0x0): multiple definition of `MPU6050::dmpGetGyro(VectorInt16*, unsigned char const*)'
sketch\Gyroscope.cpp.o (symbol from plugin):(.text+0x0): first defined here
sketch\vehicle.ino.cpp.o (symbol from plugin): In function `Fins':
(.text+0x0): multiple definition of `MPU6050::dmpGetLinearAccel(VectorInt16*, VectorInt16*, VectorFloat*)'
sketch\Gyroscope.cpp.o (symbol from plugin):(.text+0x0): first defined here
sketch\vehicle.ino.cpp.o (symbol from plugin): In function `Fins':
(.text+0x0): multiple definition of `MPU6050::dmpGetLinearAccelInWorld(VectorInt16*, VectorInt16*, Quaternion*)'
sketch\Gyroscope.cpp.o (symbol from plugin):(.text+0x0): first defined here
sketch\vehicle.ino.cpp.o (symbol from plugin): In function `Fins':
(.text+0x0): multiple definition of `MPU6050::dmpGetGravity(VectorFloat*, Quaternion*)'
sketch\Gyroscope.cpp.o (symbol from plugin):(.text+0x0): first defined here
sketch\vehicle.ino.cpp.o (symbol from plugin): In function `Fins':
(.text+0x0): multiple definition of `MPU6050::dmpGetEuler(float*, Quaternion*)'
sketch\Gyroscope.cpp.o (symbol from plugin):(.text+0x0): first defined here
sketch\vehicle.ino.cpp.o (symbol from plugin): In function `Fins':
(.text+0x0): multiple definition of `MPU6050::dmpGetYawPitchRoll(float*, Quaternion*, VectorFloat*)'
sketch\Gyroscope.cpp.o (symbol from plugin):(.text+0x0): first defined here
sketch\vehicle.ino.cpp.o (symbol from plugin): In function `Fins':
(.text+0x0): multiple definition of `MPU6050::dmpProcessFIFOPacket(unsigned char const*)'
sketch\Gyroscope.cpp.o (symbol from plugin):(.text+0x0): first defined here
sketch\vehicle.ino.cpp.o (symbol from plugin): In function `Fins':
(.text+0x0): multiple definition of `MPU6050::dmpReadAndProcessFIFOPacket(unsigned char, unsigned char*)'
sketch\Gyroscope.cpp.o (symbol from plugin):(.text+0x0): first defined here
sketch\vehicle.ino.cpp.o (symbol from plugin): In function `Fins':
(.text+0x0): multiple definition of `MPU6050::dmpGetFIFOPacketSize()'
sketch\Gyroscope.cpp.o (symbol from plugin):(.text+0x0): first defined here
exit status 1
Error compiling for board Arduino Pro or Pro Mini.
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
@Dat Ha, 👍0
Обсуждение2 ответа
Лучший ответ:
Проблема в том, что способ, которым автор библиотеки MPU6050 написал MPU6050_6Axis_MotionApps20.h, несовместим с тем, как вы используете библиотеку. Было представлено несколько предложений по устранению этой проблемы, но все они в какой-то степени устарели:
https://github.com/jrowberg/i2cdevlib/pull/174
скачать можно по адресу https://github.com/martinjos/i2cdevlib/archive/master.zip
https://github.com/jrowberg/i2cdevlib/pull/162
скачать можно по адресу https://github.com/cgel/i2cdevlib/archive/master.zip
https://github.com/jrowberg/i2cdevlib/pull/268
скачать можно по адресу https://github.com/onliner10/i2cdevlib/archive/master.zip
Это на 3 года опоздало, но вот что я сделал
- В моем собственном
файле mpu_sensor.h
я включил только
#ifndef MPU_SENSOR_H
#define MPU_SENSOR_H
#include "MPU6050.h"
#include "helper_3dmath.h"
....
#endif
Обратите внимание, что я не включаю MPU6050_6Axis_MotionApps20
, поскольку большинство типов данных объявлены в MPU6050
и helper_3dmath
- В моем
mpu_sensor.cpp
файл, вот мой включает в себя:
#include "MPU6050_6Axis_MotionApps20.h"
#include "mpu_sensor.h"
Пожалуйста, обратите внимание, что MPU6050_6Axis_MotionApps20.h
должен быть перед строкой, включающей mpu_sensor.h
.
Теперь это работает. Я согласен, что сама библиотека должна быть обновлена, но, похоже, автор не обновляется последние несколько лет.
- C++ против языка Arduino?
- Как использовать SPI на Arduino?
- Какие накладные расходы и другие соображения существуют при использовании структуры по сравнению с классом?
- Ошибка: expected unqualified-id before 'if'
- Что лучше использовать: #define или const int для констант?
- Функции со строковыми параметрами
- Библиотека DHT.h не импортируется
- ошибка: ожидаемое первичное выражение перед токеном ','
Возможно, отредактируйте свой вопрос и скажите, запускает ли IDE компиляцию и компоновку, или, если нет, покажите команды, используемые для компиляции и компоновки кода. Кроме того, хотя код может быть длинным, в вопросе вы можете показать сводку операторов #include, используемых в каждой единице кода., @James Waldby - jwpat7