簡體   English   中英

未定義對“ main”和_sbrk的引用-自己的靜態庫中的啟動代碼

[英]Undefined reference to `main' and _sbrk - startup code in own static library

我正在使用GNU ARM嵌入式工具鏈(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符號和所有其他種類的符號,而這些符號需要按照鏈接順序緊隨其后才能正確解析符號)。

另一種是sbrk_r抱怨沒有提及sbrk -我會假設這兩個都在您的圖書館。 這可以通過通過ranlib運行庫以創建適當的索引來解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM