我正在使用“ARMUmbedded处理器的GNU工具(arm-none-eabi-gcc)”来编译我的项目
我使用eclipse IDE进行编译,我有三个项目。
例如
'项目b'有一些函数调用,这些函数在'Project c'中定义。 'Project c'也有一些函数调用,这些函数在'Project b'中定义。
当我将'Project b'和'Project c'与'Project a'链接以创建最终可执行文件时,编译器说,'Project b'和'Project c'中的函数调用是未定义的。
此外,我已经验证了这些符号在使用arm-none-eabi-nm工具之前存在于静态库“Project b”和“Project c”中,然后才链接到“Project a”。
链接器是否正在删除那些已定义的符号,然后将静态库项目与“Project a”链接。然后可以采取哪些措施来阻止链接器删除这些符号。
在我的实际情况中,有三个静态库libMain_Project.a,libMAC_4E.a,libRTOS.a,我正在使用以下语法将此项目链接到该项目:
arm-none-eabi-gcc -mcpu = cortex-m4 -mthumb -mfloat-abi = hard -mfpu = fpv4-sp-d16 -Os -fmessage-length = 0 -fsigned-char -ffunction-sections -fdata-sections -Wall -g -T“C:\ Projects \ K2MAC \ 802.15.4 \ k2-node \ K2_MAC_4e \平台\ FRDMK64F \链接\ MK64F12 \ GCC \ MK64FN1M0xxx12_flash.ld” -Xlinker --gc-sections -Wl,-Map,“MAC_4E.map”-o“MAC_4E.elf”./ K2_MAC/MAC_Utilities/src/buffer_mgmt.o ./K2_MAC/MAC_Utilities/src/memory_operations.o ./K2_MAC/MAC_Utilities/src/queue_mgmt.o ./K2_MAC/MAC_Utilities/src/timer_mgmt.o ./K2_MAC/MAC_Management/PIB_Manager/pib_mgr.o ./K2_MAC/MAC_Management/Frame_Manager/fm_ie_manager.o ./K2_MAC/MAC_Management/Frame_Manager/packetfunctions.o ./K2_MAC/MAC_API/src/mac_api_request.o ./K2_MAC/MAC_API/src/mac_api_response.o ./K2_MAC/Lower_MAC/4E/LowerMacE.o ./K2_MAC/Higher_MAC/src/Higher_MAC_Primitives/HMAC_Beacon_Primitive.o ./K2_MAC/Higher_MAC/src/Higher_MAC_Primitives/HMAC_Data_Primitive.o ./K2_MAC/Higher_MAC/src/Higher_MAC_Primitives/HMAC_Scan_Primitive.o ./K2_MAC/Higher_MAC/src/Higher_MAC_Primitives/HMAC_Start_Primitive.o ./K2_MAC/Higher_MAC/src/Higher_MAC_Primitives/HMAC_TSCH_Primitive.o ./K2_MAC/Higher_MAC/src/hmac_task.o ./main.o C:/Projects/K2MAC/802.15.4/k2-node/K2_MAC_4e/Project_files/Eclipse/Main_Project/Debug/libMain_Project.a C:/Projects/K2MAC/802.15.4/k2-node/K2_MAC_4e/Project_files/Eclipse/Phy_Radio/Debug/libPhy_Radio.a C:/Projects/K2MAC/802.15.4/k2-node/K2_MAC_4e/Project_files/Eclipse/RTOS/Debug/libRTOS.a
然后它给出错误,即符号未定义,即使符号存在于静态库中,并且使用nm工具验证。