从 xc32 2.10 迁移到 2.15 时出现链接器错误

Linker errors when migrating from xc32 2.10 to 2.15

由于我无法查明的原因,2.10 和 2.15 之间的链接器似乎存在一些实质性差异。在用 "extern" 修复了一些多重定义后,我已经到了对不同之处感到困惑的地步。我有适用于 2.10 的功能代码,但在 2.15 中存在一些向量冲突。

/Applications/microchip/xc32/v2.15/bin/xc32-gcc -mprocessor=32MZ2048EFH144 -DXPRJ_default=default -legacy-libc -Wl,--defsym=_min_heap_size=65536,--no-code-in-dinit,--no-dinit-in-serial-mem -o bin/serial-r312-flash.elf obj/flash_interrupts.o obj/flash_main.o         
obj/main.o: In function `__vector_dispatch_24':
main.c:(.vector_24+0x0): multiple definition of `__vector_dispatch_24'
obj/flash_interrupts.o:interrupts.c:(.vector_24+0x0): first defined here
obj/flash_main.o: In function `__vector_dispatch_9':
main.c:(.vector_9+0x0): multiple definition of `__vector_dispatch_9'
obj/flash_interrupts.o:interrupts.c:(.vector_9+0x0): first defined here
/Applications/microchip/xc32/v2.15/bin/bin/gcc/pic32mx/4.8.3/../../../../bin/pic32m-ld: Link terminated due to previous error(s).
collect2: error: ld returned 255 exit status
make: *** [flash] Error 255

我曾尝试使向量外部化,但这丝毫没有帮助。

//interrupt.h
extern void __attribute__((vector(_TIMER_2_VECTOR), interrupt(ipl7AUTO), nomips16))SampleTimerHandler(void);

//interrupt.c
void __attribute__((vector(_TIMER_2_VECTOR), interrupt(ipl7AUTO), nomips16)){}

在main.c中,我基本上是循环了。

如有任何建议,我们将不胜感激。

尝试像这样定义您的 ISR:

void __ISR(_USB_VECTOR, IPL1SOFT) USB_ISR() {

使用 -Wall 在我的基础上构建干净。另外,我相信 nomips16 是新的默认值。

编辑:另请参阅评论。显然,试图在头文件中重新声明 ISR 是一个促成因素。