编译 C++ XSDK 项目时会导致以下链接器错误的原因是什么?
链接器错误消息:
./src/platform/platform_zynq.o: In function `timer_callback(XScuTimer*)':
platform_zynq.c:115:undefined reference to `dhcp_fine_tmr()'
platform_zynq.c:117:undefined reference to `dhcp_coarse_tmr()'
collect2.exe: error: ld returned 1 exit status
make: *** [uartcmd.elf] Error 1
链接器命令如下:
arm-none-eabi-g++ \
-mcpu=cortex-a9 \
-mfpu=vfpv3 \
-mfloat-abi=hard \
-Wl,-build-id=none \
-specs=Xilinx.spec \
-Wl,-T\
-Wl,../src/lscript.ld \
-L../../uartcmd_bsp/ps7_cortexa9_0/lib \
-o "uartcmd.elf" \
./src/platform/platform.o \
./src/platform/platform_mb.o \
./src/platform/platform_ppc.o \
./src/platform/platform_zynq.o \
./src/platform/platform_zynqmp.o \
./src/fpga_registers2.clang.o \
./src/main.o \
./src/network.o \
-Wl,\
--start-group,-lxil,-lfreertos,-lgcc,-lc,-lstdc++,--end-group\
-Wl,--start-group,-lxil,-llwip4,-lgcc,-lc,--end-group
配置 Xilinx SDK 项目如下:
// Step 0: Create Application Project with FreeRTOS Selected
//
// Step 1: Adding lwIP library to XSDK project.
//
// (2) Right click <app>_bsp and select
// "Board Support Package Settings"
// (3) Click Check box "lwip"
//
// Step 2: Add DHCP Support
// (1) Right click <app>_bsp and select
// "Board Support Package Settings"
// (2) Click Overview:freertos901_xilinx.lwip141
// (3) Check dhcp_options.dhcp_does_arp_check true
// (4) Check dhcp_options.lwip_dhcp true
符号表如下:
$ nm ./zynq_rtl.sdk/uartcmd_bsp/ps7_cortexa9_0/lib/liblwip4.a | grep -i dhcp_fine
00001c7c T dhcp_fine_tmr
$ nm ./zynq_rtl.sdk/uartcmd_bsp/ps7_cortexa9_0/lib/liblwip4.a | grep -i dhcp_coarse
00001a54 T dhcp_coarse_tmr
$ nm -C ./uartcmd/Debug/src/platform/platform_zynq.o | grep dhcp_fine
U dhcp_fine_tmr()
$ nm -C ./uartcmd/Debug/src/platform/platform_zynq.o | grep dhcp_coarse
U dhcp_coarse_tmr()
对我来说,这看起来不像名称混乱问题......我添加了“-C”选项以防止符号名称的去混乱......