问题描述
IDE是第三方公司根据eclipse魔改的,但是内核还是eclipse。运行官方给的例程编译链接下载都正常。但是自己根据此工程新建了一些文件夹并加入了.c .h文件,再次编译的时候出现大面积的错误,提示函数没有被定义。觉得很奇怪,因为这些函数都是被定义且实现的,直接点击也可以跳转过去。部分错误如下:
14:05:56 **** Incremental Build of configuration obj for project CentPeri ****
make -j8 all
Memory region Used Size Region Size %age Used
d:/mounriver/mounriver_studio/toolchain/risc-v embedded gcc/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe: ./APP/my_uart.o: in function `DebugInit':
D:\workspace\ch573\EVT\EXAM\BLE\CentPeri\obj/../APP/my_uart.c:26: undefined reference to `shellInit'
FLASH: 134804 B 448 KB 29.38%
d:/mounriver/mounriver_studio/toolchain/risc-v embedded gcc/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe: ./APP/my_uart.o: in function `UART1_IRQHandler':
D:\workspace\ch573\EVT\EXAM\BLE\CentPeri\obj/../APP/my_uart.c:100: undefined reference to `shellHandler'
d:/mounriver/mounriver_studio/toolchain/risc-v embedded gcc/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe: ./APP/usb_cdc.o: in function `usb_cdc_init':
D:\workspace\ch573\EVT\EXAM\BLE\CentPeri\obj/../APP/usb_cdc.c:443: undefined reference to `pEP0_RAM_Addr'
d:/mounriver/mounriver_studio/toolchain/risc-v embedded gcc/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe: D:\workspace\ch573\EVT\EXAM\BLE\CentPeri\obj/../APP/usb_cdc.c:443: undefined reference to `pEP0_RAM_Addr'
d:/mounriver/mounriver_studio/toolchain/risc-v embedded gcc/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe: D:\workspace\ch573\EVT\EXAM\BLE\CentPeri\obj/../APP/usb_cdc.c:444: undefined reference to `pEP1_RAM_Addr'
d:/mounriver/mounriver_studio/toolchain/risc-v embedded gcc/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe: D:\workspace\ch573\EVT\EXAM\BLE\CentPeri\obj/../APP/usb_cdc.c:444: undefined reference to `pEP1_RAM_Addr'
d:/mounriver/mounriver_studio/toolchain/risc-v embedded gcc/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe: D:\workspace\ch573\EVT\EXAM\BLE\CentPeri\obj/../APP/usb_cdc.c:445: undefined reference to `pEP2_RAM_Addr'
d:/mounriver/mounriver_studio/toolchain/risc-v embedded gcc/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe: D:\workspace\ch573\EVT\EXAM\BLE\CentPeri\obj/../APP/usb_cdc.c:445: undefined reference to `pEP2_RAM_Addr'
d:/mounriver/mounriver_studio/toolchain/risc-v embedded gcc/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe: D:\workspace\ch573\EVT\EXAM\BLE\CentPeri\obj/../APP/usb_cdc.c:446: undefined reference to `pEP3_RAM_Addr'
d:/mounriver/mounriver_studio/toolchain/risc-v embedded gcc/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe: D:\workspace\ch573\EVT\EXAM\BLE\CentPeri\obj/../APP/usb_cdc.c:446: undefined reference to `pEP3_RAM_Addr'
d:/mounriver/mounriver_studio/toolchain/risc-v embedded gcc/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe: D:\workspace\ch573\EVT\EXAM\BLE\CentPeri\obj/../APP/usb_cdc.c:447: undefined reference to `USB_DeviceInit'
d:/mounriver/mounriver_studio/toolchain/risc-v embedded gcc/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe: ./APP/usb_cdc.o: in function `DevEP3_OUT_Deal':
D:\workspace\ch573\EVT\EXAM\BLE\CentPeri\obj/../APP/usb_cdc.c:453: undefined reference to `pEP3_RAM_Addr'
d:/mounriver/mounriver_studio/toolchain/risc-v embedded gcc/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe: D:\workspace\ch573\EVT\EXAM\BLE\CentPeri\obj/../APP/usb_cdc.c:485: undefined reference to `DevEP3_IN_Deal'
d:/mounriver/mounriver_studio/toolchain/risc-v embedded gcc/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe: D:\workspace\ch573\EVT\EXAM\BLE\CentPeri\obj/../APP/usb_cdc.c:483: undefined reference to `pEP3_RAM_Addr'
d:/mounriver/mounriver_studio/toolchain/risc-v embedded gcc/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe: ./APP/usb_cdc.o: in function `DevEP4_OUT_Deal':
D:\workspace\ch573\EVT\EXAM\BLE\CentPeri\obj/../APP/usb_cdc.c:494: undefined reference to `pEP0_RAM_Addr'
d:/mounriver/mounriver_studio/toolchain/risc-v embedded gcc/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe: D:\workspace\ch573\EVT\EXAM\BLE\CentPeri\obj/../APP/usb_cdc.c:496: undefined reference to `DevEP4_IN_Deal'
d:/mounriver/mounriver_studio/toolchain/risc-v embedded gcc/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe: D:\workspace\ch573\EVT\EXAM\BLE\CentPeri\obj/../APP/usb_cdc.c:494: undefined reference to `pEP0_RAM_Addr'
d:/mounriver/mounriver_studio/toolchain/risc-v embedded gcc/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe: ./APP/usb_cdc.o: in function `USB_DevTransProcess':
D:\workspace\ch573\EVT\EXAM\BLE\CentPeri\obj/../APP/usb_cdc.c:221: undefined reference to `pEP0_RAM_Addr'
d:/mounriver/mounriver_studio/toolchain/risc-v embedded gcc/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe: D:\workspace\ch573\EVT\EXAM\BLE\CentPeri\obj/../APP/usb_cdc.c:221: undefined reference to `pEP0_RAM_Addr'
d:/mounriver/mounriver_studio/toolchain/risc-v embedded gcc/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe: D:\workspace\ch573\EVT\EXAM\BLE\CentPeri\obj/../APP/usb_cdc.c:79: undefined reference to `pEP0_RAM_Addr'
RAM: 14540 B 18 KB 78.88%
d:/mounriver/mounriver_studio/toolchain/risc-v embedded gcc/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe: D:\workspace\ch573\EVT\EXAM\BLE\CentPeri\obj/../APP/usb_cdc.c:79: undefined reference to `pEP0_RAM_Addr'
d:/mounriver/mounriver_studio/toolchain/risc-v embedded gcc/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe: ./APP/usb_cdc.o:D:\workspace\ch573\EVT\EXAM\BLE\CentPeri\obj/../APP/usb_cdc.c:109: more undefined references to `pEP0_RAM_Addr' follow
d:/mounriver/mounriver_studio/toolchain/risc-v embedded gcc/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe: ./APP/usb_cdc.o: in function `USB_DevTransProcess':
D:\workspace\ch573\EVT\EXAM\BLE\CentPeri\obj/../APP/usb_cdc.c:140: undefined reference to `pEP2_RAM_Addr'
d:/mounriver/mounriver_studio/toolchain/risc-v embedded gcc/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe: D:\workspace\ch573\EVT\EXAM\BLE\CentPeri\obj/../APP/usb_cdc.c:140: undefined reference to `pEP2_RAM_Addr'
d:/mounriver/mounriver_studio/toolchain/risc-v embedded gcc/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe: D:\workspace\ch573\EVT\EXAM\BLE\CentPeri\obj/../APP/usb_cdc.c:225: undefined reference to `pEP0_RAM_Addr'
d:/mounriver/mounriver_studio/toolchain/risc-v embedded gcc/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe: D:\workspace\ch573\EVT\EXAM\BLE\CentPeri\obj/../APP/usb_cdc.c:297: undefined reference to `pEP0_RAM_Addr'
d:/mounriver/mounriver_studio/toolchain/risc-v embedded gcc/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe: D:\workspace\ch573\EVT\EXAM\BLE\CentPeri\obj/../APP/usb_cdc.c:347: undefined reference to `pEP0_RAM_Addr'
collect2.exe: error: ld returned 1 exit status
make: *** [makefile:56: CentPeri.elf] Error 1
14:05:58 Build Failed. 35 errors, 0 warnings. (took 1s.679ms)
解决思路
对比官方给的demo,结合自己创建的工程,发现了如下区别
这个文件是灰色的,还画了条斜线,明显感觉是没有参与工程,后来百度发现确实是这样。所以基本定位是这里的问题。
解决过程
- 右键选中该文件,选择properties
- 把exclude resource from build 的钩点掉 保存
- 这句话的意思是说从工程构建中排除该文件,所以必须要把钩点掉。
- 其他自己添加的文件,好像默认也是排除构建的,需要检查一下然后参与编译
至此 问题解决。
14:14:42 **** Incremental Build of configuration obj for project CentPeri ****
make -j8 all
Memory region Used Size Region Size %age Used
FLASH: 138564 B 448 KB 30.20%
RAM: 14584 B 18 KB 79.12%
text data bss dec hex filename
137264 1300 9056 147620 240a4 CentPeri.elf
14:14:44 Build Finished. 0 errors, 0 warnings. (took 2s.388ms)
补充
自己添加的文件,一定要添加头文件的包含路径。方法如下