abcminiuser / lufa

LUFA - the Lightweight USB Framework for AVRs.
http://www.lufa-lib.org
1.04k stars 325 forks source link

multiple definition of `__vector_17' #99

Closed LightningStalker closed 7 years ago

LightningStalker commented 7 years ago

Hey guys I try to compile the examples and get this weird error.

/home/robert/src/lufa/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.c:119: multiple definition of__vector_17' obj/SoftUART.o:/home/robert/src/lufa/Projects/XPLAINBridge/Lib/SoftUART.c:102: first defined here /usr/lib/gcc/avr/4.8.1/../../../avr/bin/ld: Disabling relaxation: it will not work with multiple definitions collect2: error: ld returned 1 exit status ../../LUFA/Build/DMBS/DMBS/gcc.mk:241: recipe for target 'XPLAINBridge.elf' failed make[2]: [XPLAINBridge.elf] Error 1 make[2]: Leaving directory '/home/robert/src/lufa/Projects/XPLAINBridge' makefile:44: recipe for target 'XPLAINBridge/' failed make[1]: [XPLAINBridge/] Error 2 make[1]: Leaving directory '/home/robert/src/lufa/Projects' makefile:19: recipe for target 'all' failed make: *** [all] Error 2`

Any ideas?

LightningStalker commented 7 years ago

OS is Zorin OS (Ubuntu based) This is way above my head. I have no idea how to debug something this complex. Web searches aren't helpful.

LightningStalker commented 7 years ago

Also happening on Linux Mint 18.2 It doesn't matter weather it's the latest commit or 170418

LightningStalker commented 7 years ago

Here is more of the error as it appears on Mint:

[LNK] : Linking object files into "XPLAINBridge.elf" avr-gcc obj/XPLAINBridge.o obj/SoftUART.o obj/USARTDescriptors.o ../AVRISP-MKII/obj/AVRISPDescriptors.o ../AVRISP-MKII/obj/V2Protocol.o ../AVRISP-MKII/obj/V2ProtocolParams.o ../AVRISP-MKII/obj/ISPProtocol.o ../AVRISP-MKII/obj/ISPTarget.o ../AVRISP-MKII/obj/XPROGProtocol.o ../AVRISP-MKII/obj/XPROGTarget.o ../AVRISP-MKII/obj/XMEGANVM.o ../AVRISP-MKII/obj/TINYNVM.o ../AVRISP-MKII/obj/HIDParser.o ../AVRISP-MKII/obj/Device_AVR8.o ../AVRISP-MKII/obj/EndpointStream_AVR8.o ../AVRISP-MKII/obj/Endpoint_AVR8.o ../AVRISP-MKII/obj/Host_AVR8.o ../AVRISP-MKII/obj/PipeStream_AVR8.o ../AVRISP-MKII/obj/Pipe_AVR8.o ../AVRISP-MKII/obj/USBController_AVR8.o ../AVRISP-MKII/obj/USBInterrupt_AVR8.o ../AVRISP-MKII/obj/ConfigDescriptors.o ../AVRISP-MKII/obj/DeviceStandardReq.o ../AVRISP-MKII/obj/Events.o ../AVRISP-MKII/obj/HostStandardReq.o ../AVRISP-MKII/obj/USBTask.o obj/AudioClassDevice.o obj/CDCClassDevice.o obj/HIDClassDevice.o obj/MassStorageClassDevice.o obj/MIDIClassDevice.o obj/PrinterClassDevice.o obj/RNDISClassDevice.o obj/AndroidAccessoryClassHost.o obj/AudioClassHost.o obj/CDCClassHost.o obj/HIDClassHost.o obj/MassStorageClassHost.o obj/MIDIClassHost.o obj/PrinterClassHost.o obj/RNDISClassHost.o obj/StillImageClassHost.o -o XPLAINBridge.elf -lm -Wl,-Map=XPLAINBridge.map,--cref -Wl,--gc-sections -Wl,--relax -mmcu=at90usb1287 ../AVRISP-MKII/obj/ISPTarget.o: In function __vector_17': /home/robert/src/lufa-LUFA-170418/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.c:119: multiple definition of__vector_17' obj/SoftUART.o:/home/robert/src/lufa-LUFA-170418/Projects/XPLAINBridge/Lib/SoftUART.c:102: first defined here /usr/lib/gcc/avr/4.9.2/../../../avr/bin/ld: Disabling relaxation: it will not work with multiple definitions collect2: error: ld returned 1 exit status ../../LUFA/Build/DMBS/DMBS/gcc.mk:238: recipe for target 'XPLAINBridge.elf' failed make[2]: [XPLAINBridge.elf] Error 1 make[2]: Leaving directory '/home/robert/src/lufa-LUFA-170418/Projects/XPLAINBridge' makefile:44: recipe for target 'XPLAINBridge/' failed make[1]: [XPLAINBridge/] Error 2 make[1]: Leaving directory '/home/robert/src/lufa-LUFA-170418/Projects' makefile:19: recipe for target 'all' failed make: *** [all] Error 2

abcminiuser commented 7 years ago

Whoops, all fixed in 01e75290a0ea730e69c8465a17626c6458d19a9b. The XPLAINBridge project uses some sources from the AVRISP project, but I was compiling in the ISP programming protocol code which isn't needed, and which uses an interrupt vector internally that the XPLAINBridge project uses for other purposes.

Since the XPLAINBridge project doesn't use the ISP protocol compiling in the module isn't needed, and only results in the linker conflicts you're seeing there from the duplicate interrupt handler definition.

LightningStalker commented 7 years ago

Thanks will checkout

LightningStalker commented 7 years ago

Ok, finally got around to doing a test compile, and apparently XPLAINBridge is still referencing the ISP protocol for some reason. Here's what happens:

[LNK] : Linking object files into "XPLAINBridge.elf" avr-gcc obj/XPLAINBridge.o obj/SoftUART.o obj/USARTDescriptors.o ../AVRISP-MKII/obj/AVRISPDescriptors.o ../AVRISP-MKII/obj/V2Protocol.o ../AVRISP-MKII/obj/V2ProtocolParams.o ../AVRISP-MKII/obj/XPROGProtocol.o ../AVRISP-MKII/obj/XPROGTarget.o ../AVRISP-MKII/obj/XMEGANVM.o ../AVRISP-MKII/obj/TINYNVM.o ../AVRISP-MKII/obj/HIDParser.o ../AVRISP-MKII/obj/Device_AVR8.o ../AVRISP-MKII/obj/EndpointStream_AVR8.o ../AVRISP-MKII/obj/Endpoint_AVR8.o ../AVRISP-MKII/obj/Host_AVR8.o ../AVRISP-MKII/obj/PipeStream_AVR8.o ../AVRISP-MKII/obj/Pipe_AVR8.o ../AVRISP-MKII/obj/USBController_AVR8.o ../AVRISP-MKII/obj/USBInterrupt_AVR8.o ../AVRISP-MKII/obj/ConfigDescriptors.o ../AVRISP-MKII/obj/DeviceStandardReq.o ../AVRISP-MKII/obj/Events.o ../AVRISP-MKII/obj/HostStandardReq.o ../AVRISP-MKII/obj/USBTask.o obj/AudioClassDevice.o obj/CDCClassDevice.o obj/HIDClassDevice.o obj/MassStorageClassDevice.o obj/MIDIClassDevice.o obj/PrinterClassDevice.o obj/RNDISClassDevice.o obj/AndroidAccessoryClassHost.o obj/AudioClassHost.o obj/CDCClassHost.o obj/HIDClassHost.o obj/MassStorageClassHost.o obj/MIDIClassHost.o obj/PrinterClassHost.o obj/RNDISClassHost.o obj/StillImageClassHost.o -o XPLAINBridge.elf -lm -Wl,-Map=XPLAINBridge.map,--cref -Wl,--gc-sections -Wl,--relax -mmcu=at90usb1287 ../AVRISP-MKII/obj/V2Protocol.o: In function V2Protocol_Init': V2Protocol.c:(.text.V2Protocol_Init+0xe): undefined reference toISPTarget_ConfigureRescueClock' ../AVRISP-MKII/obj/V2Protocol.o: In function V2Protocol_ProcessCommand': V2Protocol.c:(.text.V2Protocol_ProcessCommand+0x8a): undefined reference toISPProtocol_EnterISPMode' V2Protocol.c:(.text.V2Protocol_ProcessCommand+0x19e): undefined reference to ISPProtocol_LeaveISPMode' V2Protocol.c:(.text.V2Protocol_ProcessCommand+0x1a6): undefined reference toISPProtocol_ProgramMemory' V2Protocol.c:(.text.V2Protocol_ProcessCommand+0x1ae): undefined reference to ISPProtocol_ReadMemory' V2Protocol.c:(.text.V2Protocol_ProcessCommand+0x1b4): undefined reference toISPProtocol_ChipErase' V2Protocol.c:(.text.V2Protocol_ProcessCommand+0x1bc): undefined reference to ISPProtocol_ReadFuseLockSigOSCCAL' V2Protocol.c:(.text.V2Protocol_ProcessCommand+0x1c4): undefined reference toISPProtocol_WriteFuseLock' V2Protocol.c:(.text.V2Protocol_ProcessCommand+0x1ca): undefined reference to `ISPProtocol_SPIMulti' collect2: error: ld returned 1 exit status ../../LUFA/Build/DMBS/DMBS/gcc.mk:241: recipe for target 'XPLAINBridge.elf' failed make[2]: [XPLAINBridge.elf] Error 1 make[2]: Leaving directory '/home/robert/src/lufa/Projects/XPLAINBridge' makefile:44: recipe for target 'XPLAINBridge/' failed make[1]: [XPLAINBridge/] Error 2 make[1]: Leaving directory '/home/robert/src/lufa/Projects' makefile:19: recipe for target 'all' failed make: *** [all] Error 2

abcminiuser commented 7 years ago

Did you perform a make clean beforehand, and pull the latest code? Your link step still refers to ISPProtocol.o which should no longer be a prerequisite of the ELF build target.

ghost commented 6 years ago

Bug confirmed. Same problem here.