Multiple Definition Error

Hey Guys,

I have a very basic Problem but can't solve it myself.

I want to use the I2CdevLib more accurate the file "MPU6050_6Axis_MotionApps20.h". so i have to include it to the .INO file,so the compiler "Knows" the file. but then i want also use the header in "Gyro.h". Now my Problem:

If i include "MPU6050_6Axis_MotionApps20.h" in just the ino i get an not declaired Error.

If i include it just into the "Gyro.h"i get an File not found Error.

and if i include it into both i get an multiple definition Error so... what should i do ? :confused:

THEPADA:
Hey Guys,

I have a very basic Problem but can't solve it myself.

I want to use the I2CdevLib more accurate the file "MPU6050_6Axis_MotionApps20.h". so i have to include it to the .INO file,so the compiler "Knows" the file. but then i want also use the header in "Gyro.h". Now my Problem:

If i include "MPU6050_6Axis_MotionApps20.h" in just the ino i get an not declaired Error.

If i include it just into the "Gyro.h"i get an File not found Error.

and if i include it into both i get an multiple definition Error so... what should i do ? :confused:

Look inside "MPU6050_6Axis_MotionApps20.h" is there a conditional define around .h file?

Something like:

#ifndef MPU6050_6Axis_MotionApps20_h
#define MPU6050_6Axis_MotionApps20_h
// all of the rest of the .h file content is here

// last line of header definition info
#endif

if not, add it. Then #include <MPU6050_6Axis_MotionApps20.h> to both your .ino and the .h of the gyro.

Chuck.

Hey,
Thank you but yes its around every .h file :confused:

Gyro.h :

#ifndef _GYRO_h
#define _GYRO_h

Mpu6050_6Axis_MotionApps20.h:

#ifndef _MPU6050_6AXIS_MOTIONAPPS20_H_
#define _MPU6050_6AXIS_MOTIONAPPS20_H_

THEPADA:
Hey,
Thank you but yes its around every .h file :confused:

Gyro.h :

#ifndef _GYRO_h

#define _GYRO_h




Mpu6050_6Axis_MotionApps20.h:


#ifndef MPU6050_6AXIS_MOTIONAPPS20_H
#define MPU6050_6AXIS_MOTIONAPPS20_H

Post a screen grab of the Error message, and attach a copy of the .h file and your .ino file.

Chuck.

MPU6050_6Axis_MotionApps20.h: MPU6050_6Axis_MotionApps20.h - Pastebin.com

.ino:

/*
 Name:		.ino
 Created:	03.10.2015 16:36:45
 Author:	Paul
*/

// the setup function runs once when you press reset or power the board

#include "Wire.h"
#include "I2Cdev.h"
#include "MPU6050_6Axis_MotionApps20.h"
#include "helper_3dmath.h"

void setup() {

}

// the loop function runs over and over again until power down or reset
void loop() {
  
}

Error:

Arduino: 1.6.5 (Windows 8.1), Platine: "Arduino/Genuino Uno"

JustFLY.cpp.o: In function `MPU6050::dmpInitialize()':
C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of `MPU6050::dmpInitialize()'
Gyro.cpp.o:C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: first defined here
JustFLY.cpp.o: In function `MPU6050::dmpInitialize()':
C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of `MPU6050::dmpPacketAvailable()'
Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6172543289295515447.tmp/Gyro.cpp:148: first defined here
JustFLY.cpp.o: In function `MPU6050::dmpInitialize()':
C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of `MPU6050::dmpGetAccel(long*, unsigned char const*)'
Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6172543289295515447.tmp/Gyro.cpp:148: first defined here
JustFLY.cpp.o: In function `MPU6050::dmpInitialize()':
C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of `MPU6050::dmpGetAccel(int*, unsigned char const*)'
Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6172543289295515447.tmp/Gyro.cpp:148: first defined here
JustFLY.cpp.o: In function `MPU6050::dmpInitialize()':
C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of `MPU6050::dmpGetAccel(VectorInt16*, unsigned char const*)'
Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6172543289295515447.tmp/Gyro.cpp:148: first defined here
JustFLY.cpp.o: In function `MPU6050::dmpInitialize()':
C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of `MPU6050::dmpGetQuaternion(long*, unsigned char const*)'
Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6172543289295515447.tmp/Gyro.cpp:148: first defined here
JustFLY.cpp.o: In function `MPU6050::dmpInitialize()':
C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of `MPU6050::dmpGetQuaternion(int*, unsigned char const*)'
Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6172543289295515447.tmp/Gyro.cpp:148: first defined here
JustFLY.cpp.o: In function `MPU6050::dmpInitialize()':
C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of `MPU6050::dmpGetQuaternion(Quaternion*, unsigned char const*)'
Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6172543289295515447.tmp/Gyro.cpp:148: first defined here
JustFLY.cpp.o: In function `MPU6050::dmpInitialize()':
C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of `MPU6050::dmpGetGyro(long*, unsigned char const*)'
Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6172543289295515447.tmp/Gyro.cpp:148: first defined here
JustFLY.cpp.o: In function `MPU6050::dmpInitialize()':
C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of `MPU6050::dmpGetGyro(int*, unsigned char const*)'
Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6172543289295515447.tmp/Gyro.cpp:148: first defined here
JustFLY.cpp.o: In function `MPU6050::dmpInitialize()':
C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of `MPU6050::dmpGetGyro(VectorInt16*, unsigned char const*)'
Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6172543289295515447.tmp/Gyro.cpp:148: first defined here
JustFLY.cpp.o: In function `MPU6050::dmpInitialize()':
C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of `MPU6050::dmpGetLinearAccel(VectorInt16*, VectorInt16*, VectorFloat*)'
Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6172543289295515447.tmp/Gyro.cpp:148: first defined here
JustFLY.cpp.o: In function `MPU6050::dmpInitialize()':
C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of `MPU6050::dmpGetLinearAccelInWorld(VectorInt16*, VectorInt16*, Quaternion*)'
Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6172543289295515447.tmp/Gyro.cpp:148: first defined here
JustFLY.cpp.o: In function `MPU6050::dmpInitialize()':
C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of `MPU6050::dmpGetGravity(VectorFloat*, Quaternion*)'
Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6172543289295515447.tmp/Gyro.cpp:148: first defined here
JustFLY.cpp.o: In function `MPU6050::dmpInitialize()':
C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of `MPU6050::dmpGetEuler(float*, Quaternion*)'
Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6172543289295515447.tmp/Gyro.cpp:148: first defined here
JustFLY.cpp.o: In function `MPU6050::dmpInitialize()':
C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of `MPU6050::dmpGetYawPitchRoll(float*, Quaternion*, VectorFloat*)'
Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6172543289295515447.tmp/Gyro.cpp:148: first defined here
JustFLY.cpp.o: In function `MPU6050::dmpInitialize()':
C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of `MPU6050::dmpProcessFIFOPacket(unsigned char const*)'
Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6172543289295515447.tmp/Gyro.cpp:148: first defined here
JustFLY.cpp.o: In function `MPU6050::dmpInitialize()':
C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of `MPU6050::dmpReadAndProcessFIFOPacket(unsigned char, unsigned char*)'
Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6172543289295515447.tmp/Gyro.cpp:148: first defined here
JustFLY.cpp.o: In function `MPU6050::dmpInitialize()':
C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of `MPU6050::dmpGetFIFOPacketSize()'
Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6172543289295515447.tmp/Gyro.cpp:148: first defined here
collect2.exe: error: ld returned 1 exit status
Fehler beim Kompilieren.

  Dieser Report hätte mehr Informationen mit
  "Ausführliche Ausgabe während der Kompilierung"
  aktiviert in Datei > Einstellungen

THEPADA:
MPU6050_6Axis_MotionApps20.h: MPU6050_6Axis_MotionApps20.h - Pastebin.com

.ino:

/*

Name: .ino
Created: 03.10.2015 16:36:45
Author: Paul
*/

// the setup function runs once when you press reset or power the board

#include "Wire.h"
#include "I2Cdev.h"
#include "MPU6050_6Axis_MotionApps20.h"
#include "helper_3dmath.h"

void setup() {

}

// the loop function runs over and over again until power down or reset
void loop() {
 
}




Error:


~~~
Arduino: 1.6.5 (Windows 8.1), Platine: "Arduino/Genuino Uno"

JustFLY.cpp.o: In function MPU6050::dmpInitialize()': C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of MPU6050::dmpInitialize()'
Gyro.cpp.o:C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: first defined here
JustFLY.cpp.o: In function MPU6050::dmpInitialize()': C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of MPU6050::dmpPacketAvailable()'
Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6172543289295515447.tmp/Gyro.cpp:148: first defined here
JustFLY.cpp.o: In function MPU6050::dmpInitialize()': C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of MPU6050::dmpGetAccel(long*, unsigned char const*)'
Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6172543289295515447.tmp/Gyro.cpp:148: first defined here
JustFLY.cpp.o: In function MPU6050::dmpInitialize()': C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of MPU6050::dmpGetAccel(int*, unsigned char const*)'
Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6172543289295515447.tmp/Gyro.cpp:148: first defined here
JustFLY.cpp.o: In function MPU6050::dmpInitialize()': C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of MPU6050::dmpGetAccel(VectorInt16*, unsigned char const*)'
Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6172543289295515447.tmp/Gyro.cpp:148: first defined here
JustFLY.cpp.o: In function MPU6050::dmpInitialize()': C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of MPU6050::dmpGetQuaternion(long*, unsigned char const*)'
Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6172543289295515447.tmp/Gyro.cpp:148: first defined here
JustFLY.cpp.o: In function MPU6050::dmpInitialize()': C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of MPU6050::dmpGetQuaternion(int*, unsigned char const*)'
Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6172543289295515447.tmp/Gyro.cpp:148: first defined here
JustFLY.cpp.o: In function MPU6050::dmpInitialize()': C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of MPU6050::dmpGetQuaternion(Quaternion*, unsigned char const*)'
Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6172543289295515447.tmp/Gyro.cpp:148: first defined here
JustFLY.cpp.o: In function MPU6050::dmpInitialize()': C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of MPU6050::dmpGetGyro(long*, unsigned char const*)'
Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6172543289295515447.tmp/Gyro.cpp:148: first defined here
JustFLY.cpp.o: In function MPU6050::dmpInitialize()': C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of MPU6050::dmpGetGyro(int*, unsigned char const*)'
Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6172543289295515447.tmp/Gyro.cpp:148: first defined here
JustFLY.cpp.o: In function MPU6050::dmpInitialize()': C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of MPU6050::dmpGetGyro(VectorInt16*, unsigned char const*)'
Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6172543289295515447.tmp/Gyro.cpp:148: first defined here
JustFLY.cpp.o: In function MPU6050::dmpInitialize()': C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of MPU6050::dmpGetLinearAccel(VectorInt16*, VectorInt16*, VectorFloat*)'
Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6172543289295515447.tmp/Gyro.cpp:148: first defined here
JustFLY.cpp.o: In function MPU6050::dmpInitialize()': C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of MPU6050::dmpGetLinearAccelInWorld(VectorInt16*, VectorInt16*, Quaternion*)'
Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6172543289295515447.tmp/Gyro.cpp:148: first defined here
JustFLY.cpp.o: In function MPU6050::dmpInitialize()': C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of MPU6050::dmpGetGravity(VectorFloat*, Quaternion*)'
Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6172543289295515447.tmp/Gyro.cpp:148: first defined here
JustFLY.cpp.o: In function MPU6050::dmpInitialize()': C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of MPU6050::dmpGetEuler(float*, Quaternion*)'
Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6172543289295515447.tmp/Gyro.cpp:148: first defined here
JustFLY.cpp.o: In function MPU6050::dmpInitialize()': C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of MPU6050::dmpGetYawPitchRoll(float*, Quaternion*, VectorFloat*)'
Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6172543289295515447.tmp/Gyro.cpp:148: first defined here
JustFLY.cpp.o: In function MPU6050::dmpInitialize()': C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of MPU6050::dmpProcessFIFOPacket(unsigned char const*)'
Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6172543289295515447.tmp/Gyro.cpp:148: first defined here
JustFLY.cpp.o: In function MPU6050::dmpInitialize()': C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of MPU6050::dmpReadAndProcessFIFOPacket(unsigned char, unsigned char*)'
Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6172543289295515447.tmp/Gyro.cpp:148: first defined here
JustFLY.cpp.o: In function MPU6050::dmpInitialize()': C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of MPU6050::dmpGetFIFOPacketSize()'
Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6172543289295515447.tmp/Gyro.cpp:148: first defined here
collect2.exe: error: ld returned 1 exit status
Fehler beim Kompilieren.

Dieser Report hätte mehr Informationen mit
  "Ausführliche Ausgabe während der Kompilierung"
  aktiviert in Datei > Einstellungen

You are going to have to trace out were the overlap between JustFly and Gyro. attach both of those libraries and there header files. I'll take a look.

Chuck.

Hey Chuck,

Thanks for your reply.
In other words you can say that the Problem appears because there is a overlap between the Gyro class and the MPU6050_6AxisMotion... ?

I thought the problem appears because i include the file in the ino and the Gyro an the Präcompiler compiles each on there own and just sees that there are 2 times the same Functions because of thi i have the multiple definition Errors... Is this wrong?

MFG THEPADA

THEPADA:
Hey Chuck,

Thanks for your reply.
In other words you can say that the Problem appears because there is a overlap between the Gyro class and the MPU6050_6AxisMotion... ?

I thought the problem appears because i include the file in the ino and the Gyro an the Präcompiler compiles each on there own and just sees that there are 2 times the same Functions because of thi i have the multiple definition Errors... Is this wrong?

MFG THEPADA

Where is your include of "MPU6050_6AxisMotion" in Gyro library? is it in .h or .cpp?

Chuck.

They are in the .cpp File :confused:

Should i upload my source? :slight_smile:

THEPADA:
They are in the .cpp File :confused:

Should i upload my source? :slight_smile:

Yes.

Chuck.

Hi

Is the

#include "MPU6050_6Axis_MotionApps20.h"

file in

MPU6050_6Axis_MotionApps20 named folder?

I thought all library files had to be in folders in the library folder or the project folder.
And that folder has to have the exact same name as the library files inside.

Tom... :slight_smile:

chucktodd:
Yes.

Chuck.

Here You are: https://drive.google.com/file/d/0B7J5PZPcZXu-X3ZUSWtsWDduTjA/view?usp=sharing

Thanks :slight_smile:

MFG Paul

TomGeorge:
Hi

Is the

#include "MPU6050_6Axis_MotionApps20.h"

file in

MPU6050_6Axis_MotionApps20 named folder?

I thought all library files had to be in folders in the library folder or the project folder.
And that folder has to have the exact same name as the library files inside.

Tom... :slight_smile:

Hey tom no they aren't they are in 2 folders i2cdevlib and in MPU5060 and i'm pretty sure it's vailid ... :confused:

THEPADA:
Here You are: JustFly Archive

Thanks :slight_smile:

MFG Paul

Paul,
if you are using the Arduino IDE to compile this software, The IDE just concatenates everything in the Sketch directory.

I would suggest you move your Gyro.h and Gyro.cpp into their own subdirectory under the library folder.

[arduino sketch path]/libraries/Gyro/

Do you really need stdafx?

then you have to restart the IDE because Arduino builds a runtime library index. Any new library requires a IDE restart.

Chuck.

chucktodd:
Paul,
if you are using the Arduino IDE to compile this software, The IDE just concatenates everything in the Sketch directory.

I would suggest you move your Gyro.h and Gyro.cpp into their own subdirectory under the library folder.

[arduino sketch path]/libraries/Gyro/

Do you really need stdafx?

then you have to restart the IDE because Arduino builds a runtime library index. Any new library requires a IDE restart.

Chuck.

Doesn't work :frowning:
Thank you for your help chuck it's really nice from you :))

Any other idea ? :confused:

changed my code:

gyro.cpp

#include "Gyro.h"
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
//#include"Wire.h"
#endif
volatile bool Gyro::mpuInterrupt = false;

void dmpDataReady() {
	Gyro::setMpuIntStatus(true);
}

static void setMpuIntStatus(volatile bool status)
{
	Gyro::mpuInterrupt = status;
}

void Gyro::init() {
	// join I2C bus (I2Cdev library doesn't do this automatically)
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
	Wire.begin();
	TWBR = 24; // 400kHz I2C clock (200kHz if CPU is 8MHz)
#elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE
	Fastwire::setup(400, true);
#endif

	Serial.begin(115200);
	while (!Serial); // wait for Leonardo enumeration, others continue immediately
	Serial.println(F("Initializing I2C devices..."));
	mpu.initialize();

	// verify connection
	Serial.println(F("Testing device connections..."));
	Serial.println(mpu.testConnection() ? F("MPU6050 connection successful") : F("MPU6050 connection failed"));

	// wait for ready
	Serial.println(F("\nSend any character to begin DMP programming and demo: "));
	while (Serial.available() && Serial.read());
	while (!Serial.available());
	while (Serial.available() && Serial.read()); 

	// load and configure the DMP
	Serial.println(F("Initializing DMP..."));
	devStatus = mpu.dmpInitialize();

	mpu.setXGyroOffset(220);
	mpu.setYGyroOffset(76);
	mpu.setZGyroOffset(-85);
	mpu.setZAccelOffset(1788); 

	if (devStatus == 0) {
		// turn on the DMP, now that it's ready
		Serial.println(F("Enabling DMP..."));
		mpu.setDMPEnabled(true);

		// enable Arduino interrupt detection
		Serial.println(F("Enabling interrupt detection (Arduino external interrupt 0)..."));
		attachInterrupt(0,dmpDataReady, RISING);
		mpuIntStatus = mpu.getIntStatus();

		// set our DMP Ready flag so the main loop() function knows it's okay to use it
		Serial.println(F("DMP ready! Waiting for first interrupt..."));
		dmpReady = true;

		packetSize = mpu.dmpGetFIFOPacketSize();
	}
	else {

		Serial.print(F("DMP Initialization failed (code "));
		Serial.print(devStatus);
		Serial.println(F(")"));
	}

	pinMode(LED_PIN, OUTPUT);
}

void Gyro::GetVals() {
	if (!dmpReady) return;
	while (!mpuInterrupt && fifoCount < packetSize) {
	}
	mpuInterrupt = false;
	mpuIntStatus = mpu.getIntStatus();

	fifoCount = mpu.getFIFOCount();

	if ((mpuIntStatus & 0x10) || fifoCount == 1024) {
		mpu.resetFIFO();
		Serial.println(F("FIFO overflow!"));
	else if (mpuIntStatus & 0x02) {
		while (fifoCount < packetSize) fifoCount = mpu.getFIFOCount();
		mpu.getFIFOBytes(fifoBuffer, packetSize);

		fifoCount -= packetSize;

#ifdef OUTPUT_READABLE_QUATERNION
		mpu.dmpGetQuaternion(&q, fifoBuffer);
		Serial.print("quat\t");
		Serial.print(q.w);
		Serial.print("\t");
		Serial.print(q.x);
		Serial.print("\t");
		Serial.print(q.y);
		Serial.print("\t");
		Serial.println(q.z);
#endif

#ifdef OUTPUT_READABLE_EULER
		mpu.dmpGetQuaternion(&q, fifoBuffer);
		mpu.dmpGetEuler(euler, &q);
		Serial.print("euler\t");
		Serial.print(euler[0] * 180 / M_PI);
		Serial.print("\t");
		Serial.print(euler[1] * 180 / M_PI);
		Serial.print("\t");
		Serial.println(euler[2] * 180 / M_PI);
#endif

#ifdef OUTPUT_READABLE_YAWPITCHROLL
		mpu.dmpGetQuaternion(&q, fifoBuffer);
		mpu.dmpGetGravity(&gravity, &q);
		mpu.dmpGetYawPitchRoll(ypr, &q, &gravity);
		Serial.print("ypr\t");
		Serial.print(ypr[0] * 180 / M_PI);
		Serial.print("\t");
		Serial.print(ypr[1] * 180 / M_PI);
		Serial.print("\t");
		Serial.println(ypr[2] * 180 / M_PI);
#endif

#ifdef OUTPUT_READABLE_REALACCEL
		mpu.dmpGetQuaternion(&q, fifoBuffer);
		mpu.dmpGetAccel(&aa, fifoBuffer);
		mpu.dmpGetGravity(&gravity, &q);
		mpu.dmpGetLinearAccel(&aaReal, &aa, &gravity);
		Serial.print("areal\t");
		Serial.print(aaReal.x);
		Serial.print("\t");
		Serial.print(aaReal.y);
		Serial.print("\t");
		Serial.println(aaReal.z);
#endif

#ifdef OUTPUT_READABLE_WORLDACCEL
		mpu.dmpGetQuaternion(&q, fifoBuffer);
		mpu.dmpGetAccel(&aa, fifoBuffer);
		mpu.dmpGetGravity(&gravity, &q);
		mpu.dmpGetLinearAccel(&aaReal, &aa, &gravity);
		mpu.dmpGetLinearAccelInWorld(&aaWorld, &aaReal, &q);
		Serial.print("aworld\t");
		Serial.print(aaWorld.x);
		Serial.print("\t");
		Serial.print(aaWorld.y);
		Serial.print("\t");
		Serial.println(aaWorld.z);
#endif

#ifdef OUTPUT_TEAPOT
		teapotPacket[2] = fifoBuffer[0];
		teapotPacket[3] = fifoBuffer[1];
		teapotPacket[4] = fifoBuffer[4];
		teapotPacket[5] = fifoBuffer[5];
		teapotPacket[6] = fifoBuffer[8];
		teapotPacket[7] = fifoBuffer[9];
		teapotPacket[8] = fifoBuffer[12];
		teapotPacket[9] = fifoBuffer[13];
		Serial.write(teapotPacket, 14);
		teapotPacket[11]++; 
#endif
		this->blinkState = !blinkState;
		digitalWrite(LED_PIN, blinkState);
	}
}

Gyro.h

#ifndef _GYRO_h
#define _GYRO_h

#if defined(ARDUINO) && ARDUINO >= 100
	#include "arduino.h"
	#include "Wire.h"
	#include "I2Cdev.h"
	#include "MPU6050_6Axis_MotionApps20.h"
	#include "helper_3dmath.h"
#else
	#include "WProgram.h"
#endif


class Gyro{

	
private:
	MPU6050 mpu;
	#define LED_PIN 13 // (Arduino is 13, Teensy is 11, Teensy++ is 6)
	bool blinkState;
	// MPU control/status vars
	bool dmpReady = false;  // set true if DMP init was successful
	uint8_t devStatus;      // return status after each device operation (0 = success, !0 = error)
	uint16_t packetSize;    // expected DMP packet size (default is 42 bytes)
	uint16_t fifoCount;     // count of all bytes currently in FIFO
	uint8_t fifoBuffer[64]; // FIFO storage buffer
	uint8_t mpuIntStatus;   // holds actual interrupt status byte from MPU
	// orientation/motion vars
	Quaternion q;           // [w, x, y, z]         quaternion container
	VectorInt16 aa;         // [x, y, z]            accel sensor measurements
	VectorInt16 aaReal;     // [x, y, z]            gravity-free accel sensor measurements
	VectorInt16 aaWorld;    // [x, y, z]            world-frame accel sensor measurements
	VectorFloat gravity;    // [x, y, z]            gravity vector
	float euler[3];         // [psi, theta, phi]    Euler angle container
	float ypr[3];           // [yaw, pitch, roll]   yaw/pitch/roll container and gravity vector

	// packet structure for InvenSense teapot demo
	uint8_t teapotPacket[14] = { '

Error:

C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of MPU6050::dmpInitialize()' Gyro.cpp.o:C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: first defined here JustFLY.cpp.o: In function MPU6050::dmpInitialize()':
C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of MPU6050::dmpPacketAvailable()' Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6581932928238959917.tmp/Gyro.cpp:152: first defined here JustFLY.cpp.o: In function MPU6050::dmpInitialize()':
C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of MPU6050::dmpGetAccel(long*, unsigned char const*)' Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6581932928238959917.tmp/Gyro.cpp:152: first defined here JustFLY.cpp.o: In function MPU6050::dmpInitialize()':
C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of MPU6050::dmpGetAccel(int*, unsigned char const*)' Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6581932928238959917.tmp/Gyro.cpp:152: first defined here JustFLY.cpp.o: In function MPU6050::dmpInitialize()':
...

, 0x02, 0, 0, 0, 0, 0, 0, 0, 0, 0x00, 0x00, '\r', '\n' };

public:
volatile static bool mpuInterrupt; // indicates whether MPU interrupt pin has gone high
void static setMpuIntStatus(uint8_t status);
void init();
void GetVals();

};

#endif


Error:

> C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of `MPU6050::dmpInitialize()'
> Gyro.cpp.o:C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: first defined here
> JustFLY.cpp.o: In function `MPU6050::dmpInitialize()':
> C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of `MPU6050::dmpPacketAvailable()'
> Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6581932928238959917.tmp/Gyro.cpp:152: first defined here
> JustFLY.cpp.o: In function `MPU6050::dmpInitialize()':
> C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of `MPU6050::dmpGetAccel(long*, unsigned char const*)'
> Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6581932928238959917.tmp/Gyro.cpp:152: first defined here
> JustFLY.cpp.o: In function `MPU6050::dmpInitialize()':
> C:\Users\Paul\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:325: multiple definition of `MPU6050::dmpGetAccel(int*, unsigned char const*)'
> Gyro.cpp.o:C:\Users\Paul\AppData\Local\Temp\build6581932928238959917.tmp/Gyro.cpp:152: first defined here
> JustFLY.cpp.o: In function `MPU6050::dmpInitialize()':
> ...

Shouldn't it be:
#include <Gyro.h>?

doesnt change anything ... :confused:

Good grief, guys!

The multiple definitions exist because MPU6050_6Axis_MotionApps20.h contains function and variable definitions, and the file is included multiple times in the project.

Solution: move function and variable definitions out of MPU6050_6Axis_MotionApps20.h and move them into another source file. MPU6050_6Axis_MotionApps20.h should contain only function and variable declarations.

If the OP is not the author of MPU6050_6Axis_MotionApps20.h, he should report this major bug to the code's author so he can fix his code and prevent other users from stumbling over this same problem.