【发布时间】:2016-12-26 13:14:20
【问题描述】:
我正在使用 GNU ARM Embedded 工具链 (gcc-arm-none-eabi-5_4-2016q2) 开发 Cortex-M4(STM32F4-Discovery 板)。我的代码的硬件相关部分(HAL-lib、CMSIS、启动等)构建在一个静态库中,我尝试将其链接到我的应用程序代码。我的应用程序代码包含一个main 符号,我的库包含一个_sbrk 符号。这些是错误消息:
engine_control/source/os/release/libkosmos-arm-stm32f4-discovery.a(_startup.o): In function `_start':
_startup.c:(.after_vectors+0x9a): undefined reference to `main'
和:
/opt/gcc-arm-none-eabi-5_4-2016q2/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/fpu/libc_nano.a(lib_a-sbrkr.o): In function `_sbrk_r':
sbrkr.c:(.text._sbrk_r+0xc): undefined reference to `_sbrk'
我认为我的链接顺序有问题。这是我的链接命令:
arm-none-eabi-g++ -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Os -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -ffreestanding -fno-move-loop-invariants -Werror -Wunused -Wuninitialized -Wall -Wextra -Wmissing-declarations -Wconversion -Wpointer-arith -Wpadded -Wshadow -Wlogical-op -Waggregate-return -Wfloat-equal -T mem.ld -T libs.ld -T sections.ld -nostartfiles -Xlinker --gc-sections -L"config/linker" --specs=nano.specs -L/home/tkl/git/engine_control/source/os/release -Wl,-Map,"/home/tkl/git/engine_control/release/map/arm/release/.map" -lkosmos-arm-stm32f4-discovery -o "/home/tkl/git/engine_control/release/execute/arm/release/.elf"
我做错了什么?
【问题讨论】:
-
您实际链接的是什么?
main应该在哪里?该链接命令似乎只包含一个库,没有目标文件... -
谢谢,是的,你是对的。我错过了链接我的主要对象(因为不幸的是,我使用不同的变量名来定义对象和在我的 makefile 中使用对象;)。
标签: c gcc linker arm undefined-reference