Page 1 of 2

MOD54415 compiler error messages

Posted: Mon Dec 02, 2013 5:54 am
by jediengineer
Hi Guys - I'm receiving an unfamiliar compiler message from eclipse... Be a little patient with me if this seems too simple - I'm still new to embedded development with C and C++, and haven't done this in 15 years. Sorry, I'm not allowed to post code per customer's request.

The messages are this:

funcs.od:(.data+0x0): multiple definition of `ADC'
startup.od:(.data+0x0): first defined here
funcs.od:(.data+0x20): multiple definition of `MUX_POS'
startup.od:(.data+0x20): first defined here
87-764-2800rev1.od:(.data+0x0): multiple definition of `ADC'
startup.od:(.data+0x0): first defined here
87-764-2800rev1.od:(.data+0x20): multiple definition of `MUX_POS'
startup.od:(.data+0x20): first defined here

I'm not sure what the ".od" files are, or how to address the propblem. When I double click the error, it opens the file, but all I have is ascii characters (funny ones, not the text) that I can't decipher... can someone shed a little light? Thanks!

Re: MOD54415 compiler error messages

Posted: Mon Dec 02, 2013 9:31 am
by dciliske
So, first of all, '.od' files are "object, debug" files. These are the compiled source for (presumably) your project before everything gets smashed together to form the application image/executable. If you were building the release mode of your project you'd get '.o' files instead.

Multiple definition errors is the compiler basically yelling at you saying it doesn't know what version of a symbol (variable or function) to use because it's found multiple ones (normally when it's linking the executable together from the individual object files).

Now, based on the messages here, you've got a couple variables that get defined twice, which you <sarcasm>obviously</sarcasm> shouldn't be doing. My guess is that the variables are listed in a header file without declaring them 'extern'. This will attempt to instantiate the variable in every file that includes the header. The right way to do this is to have the variable 'extern' in the header, but declared in one file, so it actually gets allocated. It's also possible that you've got a backed up file in your project that is getting included in the output, which is screwing things up (87-764-2800rev1.cpp doesn't sound like a normal filename...).

-Dan

Re: MOD54415 compiler error messages

Posted: Mon Dec 02, 2013 9:54 am
by jediengineer
Thanks Dan, I'll look closer at my header files. I didn't understand the .od file... I had figured it would find the error in the .cpp files. I did move all my defines to a header file, and originally I did have some duplicates. I thought I got rid of all of them. 87-764-2800rev1.cpp is actually the correct file name. It's a "part number" for the software so to speak, and will most likely change before I'm through. But for now, that's just how they want me to label it. I'll go through my files and see if there are multiple definitions again, but these listed were the original ones I fixed already (I'm pretty sure at least).

Re: MOD54415 compiler error messages

Posted: Mon Dec 02, 2013 10:23 am
by tod
This may seem somewhat pedantic but...
What you are seeing are "linker" errors, not compiler errors. The compiler actually compiled your code with no problem. The linker however wasn't happy. The reason I mention this is to clarify why you're seeing the object files (.o or .od) not the source files, in the error message. Since the linker links together the object files that is what it reports as the problem. The GNU tool chain muddies up this distinction somewhat as the gcc and g++ tools that you see invoked are a higher level beast, in effect a "driver" tool that invokes the needed tools in the preprocessor/compiler/linker chain. For example, in the console window, you will see at the start some lines that look something like: m68k-elf-g++ ... That command gets used for compiling and for linking.

Later (once you link successfully), you will also see additional tools like m68k-elf-objcopy and compcode that are more embedded and NetBurner (respectively) specific.

Also you do have include guards (or #pragma once) on all your header files right?

Re: MOD54415 compiler error messages

Posted: Mon Dec 02, 2013 10:31 am
by jediengineer
Tod, I do not have include guards... not sure how they're used...

If you're referring to:


#ifndef DEFS_H_
#define DEFS_H_

// header info


#endif /* DEFS_H_ */

Then yes, I have those included.

Re: MOD54415 compiler error messages

Posted: Mon Dec 02, 2013 10:52 am
by jediengineer
Currently this is the entire error message I'm receiving:

**** Build of configuration Debug for project 87-764-2800rev1 ****

**** Internal Builder is used for build ****
m68k-elf-g++ -O0 -falign-functions=4 -D_DEBUG -IC:\nburn/include -IC:\nburn/MOD5441X/include -IC:\nburn/gcc-m68k/m68k-elf/include -IX:\NRG\87-764-2800rev1 -gdwarf-2 -Wall -Wno-write-strings -c -fmessage-length=0 -fno-rtti -fno-exceptions -mcpu=5206e -DMOD5441X -DMCF5441X -o funcs.od ..\funcs.cpp
m68k-elf-g++ -O0 -falign-functions=4 -D_DEBUG -IC:\nburn/include -IC:\nburn/MOD5441X/include -IC:\nburn/gcc-m68k/m68k-elf/include -IX:\NRG\87-764-2800rev1 -gdwarf-2 -Wall -Wno-write-strings -c -fmessage-length=0 -fno-rtti -fno-exceptions -mcpu=5206e -DMOD5441X -DMCF5441X -o startup.od ..\startup.cpp
m68k-elf-g++ -O0 -falign-functions=4 -D_DEBUG -IC:\nburn/include -IC:\nburn/MOD5441X/include -IC:\nburn/gcc-m68k/m68k-elf/include -IX:\NRG\87-764-2800rev1 -gdwarf-2 -Wall -Wno-write-strings -c -fmessage-length=0 -fno-rtti -fno-exceptions -mcpu=5206e -DMOD5441X -DMCF5441X -o 87-764-2800rev1.od ..\87-764-2800rev1.cpp
m68k-elf-g++ startup.od funcs.od 87-764-2800rev1.od -Wl,-Map=87-764-2800rev1.map -mcpu=5206e -Wl -Wl,-n -TC:\nburn/MOD5441X/lib/MOD5441X.ld -Wl,-RC:\nburn/MOD5441X/lib/sys.ld -Wl,--start-group,C:\nburn/lib/DBMOD5441X.a C:\nburn/lib/DBNetBurner.a C:\nburn/lib/FatFile.a C:\nburn\lib\DBdebugLibrary.a C:\nburn\lib\DBLua_Full.a -Wl,--end-group -o87-764-2800rev1.elf
funcs.od:(.data+0x0): multiple definition of `ADC'
startup.od:(.data+0x0): first defined here
funcs.od:(.data+0x20): multiple definition of `MUX_POS'
startup.od:(.data+0x20): first defined here
87-764-2800rev1.od:(.data+0x0): multiple definition of `ADC'
startup.od:(.data+0x0): first defined here
87-764-2800rev1.od:(.data+0x20): multiple definition of `MUX_POS'
startup.od:(.data+0x20): first defined here
collect2: ld returned 1 exit status
Build error occurred, build is stopped
Time consumed: 1160 ms.

Re: MOD54415 compiler error messages

Posted: Mon Dec 02, 2013 11:16 am
by dciliske
Ok, real quick, can you list every location where the variables ADC and MUX_POS are defined i.e.
In header file 'blahblah.h', line xyz,

Code: Select all

uint8_t ADC;
And if the things are in a header file, tell us what includes those headers.

Also, Tod's entirely correct on things, I just didn't want to get bogged down in the details that I didn't think were hugely relevant at the time (entirely subjective decision).

-Dan

Re: MOD54415 compiler error messages

Posted: Mon Dec 02, 2013 11:25 am
by jediengineer
They are listed in a header file called "defs.h" as such:

// ADC input addresses:
WORD ADC[16] = { 0xADC0, 0xADC1, 0xADC2, 0xADC3, 0xADC4, 0xADC5, 0xADC6, 0xADC7, 0xADC8, 0xADC9, 0xADCA, 0xADCB, 0xADCC, 0xADCD, 0xADCE, 0xADCF };

// Mux position addresses:
WORD MUX_POS[32] = { 0xD100, 0xD101, 0xD102, 0xD103, 0xD104, 0xD105, 0xD106, 0xD107, 0xD108, 0xD109, 0xD10A, 0xD10B, 0xD10C, 0xD10D, 0xD10E, 0xD10F,
0xD110, 0xD111, 0xD112, 0xD113, 0xD114, 0xD115, 0xD116, 0xD117, 0xD118, 0xD119, 0xD11A, 0xD11B, 0xD11C, 0xD11D, 0xD11E, 0xD11F };


My three functions, 87-764-2800rev1.cpp, startup.cpp, and funcs.cpp all include the header, but so far, only 87-764-2800rev1.cpp uses the variables as such:

for(volatile int i = 0; i < 16; i++)
{
pkt.AddData((PBYTE)ADC, 2); // Send ADC Channel
pkt.AddData((PBYTE)ADC_RESULTS, 2); // Send ADC REsult for that channel
}

and

for(volatile int i = 0; i < 32; i++)
{
MUX_OUT = (MUX_STAT | 0xD000); // makes result 16 bits long, and in proper format
pkt.AddData((PBYTE)MUX_POS, 2); // Send MUX Channel
pkt.AddData((PBYTE)MUX_OUT, 2); // Send MUX REsult for that channel
}

Re: MOD54415 compiler error messages

Posted: Mon Dec 02, 2013 11:40 am
by tony
Double check the files 87-764-2800rev1.cpp, startup.cpp, and funcs.cpp. Since you have the guard on your header, I think you must have declared the variables in one of the cpp files as well.

Re: MOD54415 compiler error messages

Posted: Mon Dec 02, 2013 11:42 am
by jediengineer
No Tony, I don't see it. I've checked it a few times now.