arm-none-eabi-gcc链接静态库失败

时间:2015-08-22 14:20:25

标签: c eclipse gcc arm embedded

我正在使用“ARMUmbedded处理器的GNU工具(arm-none-eabi-gcc)”来编译我的项目

我使用eclipse IDE进行编译,我有三个项目。

例如

  • '投射' - 手臂可执行项目
  • '项目b' - 静态库
  • 'Project c' - 静态库

'项目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工具验证。

0 个答案:

没有答案