gpt4 book ai didi

c++ - 使用 arm-none-eabi-gcc、newlib 和 cmake 链接 C/C++ STM32 项目

转载 作者:太空宇宙 更新时间:2023-11-04 12:57:34 24 4
gpt4 key购买 nike

我在使用 CMake 链接我的 STM32 项目时遇到困难。生成的链接命令是:

/Users/jeremy/gcc-arm-none-eabi-6-2017-q2-update/bin/arm-none-eabi-g++  -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -fdata-sections -ffunction-sections -g -Og -gdwarf-2 -MMD -MP  -std=c++11 -Wl,-search_paths_first -Wl,-headerpad_max_install_names -specs=nano.specs -T/Users/jeremy/stm32l432kc_freertos_template/STM32L432KCUx_FLASH.ld -Wl,-Map=target.map,--cref -Wl,--gc-sections 

< ... lots of .o files here ...>

-o stm32l432kc_freertos -lc -lm -lnosys

不幸的是,我遇到了两组错误。第一个是:

arm-none-eabi/bin/ld: warning: cannot find entry symbol arch_paths_first; defaulting to 0000000008000190

表示没有入口符号,但是LD文件中第一行代码是:ENTRY(Reset_Handler)。符号 Reset_Handler 在链接文件 startup_stm32l432xx.s 中定义。

第二组错误与标准库有关:

/Users/jeremy/gcc-arm-none-eabi-6-2017-q2-update/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/fpv4-sp/hard/libg_nano.a(lib_a-signalr.o): In function `_kill_r':
signalr.c:(.text._kill_r+0xe): undefined reference to `_kill'
/Users/jeremy/gcc-arm-none-eabi-6-2017-q2-update/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/fpv4-sp/hard/libg_nano.a(lib_a-signalr.o): In function `_getpid_r':
signalr.c:(.text._getpid_r+0x0): undefined reference to `_getpid'

应该通过链接 -lnosys 来解决,但链接器似乎忽略了这一点。

从本质上讲,链接器似乎忽略了 LD 文件中的一些指令并忽略了我传递的一些标志。我意识到这可能是我做错了什么,但我看不出是什么。

如果我添加 -specs=nosys.specs 后两个错误就会消失,但这不是必需的吗?有人可以帮我了解这里出了什么问题吗?

最佳答案

看起来 OSX 上的 CMake 正在添加 gcc arm 工具链不支持的 -Wl,-search_paths_first。修复是将其添加到 CMakelists.txt 文件中:

if ( APPLE )
string ( REPLACE "-Wl,-search_paths_first" "" CMAKE_C_LINK_FLAGS ${CMAKE_C_LINK_FLAGS} )
string ( REPLACE "-Wl,-search_paths_first" "" CMAKE_CXX_LINK_FLAGS ${CMAKE_CXX_LINK_FLAGS} )
endif ()

修复从这里获取:https://github.com/kiibohd/controller/blob/master/Lib/CMake/build.cmake

仍然不知道 -lnosys 被忽略了。

关于c++ - 使用 arm-none-eabi-gcc、newlib 和 cmake 链接 C/C++ STM32 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45874166/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com