cmake arm-none-eabi-gcc for stm32 cpp project

C++学习(三九四)relocation R_AARCH64_ADR_PREL_PG_HI21 undefined reference to `__dso_handle‘ E:\osg-osgearth-source\other_3rdParty\gdal-2.3.2\frmts\gtiff/geotiff.cpp:106: undefined reference to `__dso_handle' geotiff.cpp没有__dso_handle D:\android-ndk-r19c\toolchains\llvm\prebuilt\windows-x86_64\bin/../lib/gcc/aarch64-linux-android/4.9.x/../../. 阅读详情

尝试把原有的stm32工程F1canBootloader用cmake来管理,遇到了以下几个坑:

1. 报错,undefined reference to `__dso_handle'

CMakeFiles/app.elf.dir/home/chenxx/engineering/stmproj/F1canBootLoader/iap/uartIapDevice.cpp.obj: 

In function `__static_initialization_and_destruction_0(int, int)':
uartIapDevice.cpp:(.text+0x5dc): undefined reference to `__dso_handle'
/usr/lib/gcc/arm-none-eabi/4.8.2/../../../arm-none-eabi/bin/ld: app.elf: hidden symbol `__dso_handle' isn't defined
/usr/lib/gcc/arm-none-eabi/4.8.2/../../../arm-none-eabi/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status


实际情况是根本没有起名为__dso_handle的函数。后来经查询是gcc在编译静态链接库时,如果声明了全局变量,会报这个错。一般可以通过添加一下编译选项"

STM32 Makefile C/C++ 通用 由Nordic SDK的gcc编译文件修改 Makefile: ########################################################################################################################## # File automatically-generated by tool: [projectgenerator] version: [3.7.1] date: [Fri Jul 03 2. 阅读详情

相关推荐

搭建树莓派Pico交叉编译环境和工具链(arm-none-eabi-gcc)时可能会遇到的错误以及解决方案

本文是一个类似手册的文章,用来记录可能遇到的错误。你可以通过侧栏选择遇到的错误来查看详细信息。No install step for ‘ELF2UF2Build’,fatal error: cannot read spec file ‘nosys.specs’: No such file or directory,连接错误

ZhongUncle的博客 2826

基于STM32的IAP开发

公司在开发一款智能眼镜,使用NXP系列芯片作为主控芯片,蓝牙连接,总体来说不是很复杂。在发给客户测试的时候发现了一些问题,需要重新更新程序。这在开发人员看来只要两三下的事情,在客户手里可能就是一个巨麻烦的事情。所以决定给设备添加在线升级功能,通过蓝牙将新的固件更新到主控芯片里,而bootloader就是OTA中不可或缺的一部分。部分内容是在网上转载其他资料的,如冒犯,速告知,立马删除。 不需要拆机就能对产品进行固件升级是很多人想要的效果,不仅方便而且节省精力和成本。那么如何完成这项工作呢?接下来所介绍的Bo

AN15778423590的博客 4763

GCC【3】-Win10 + CMake + MinGW+搭建STM32 GCC开源开发环境

文章目录前言一、安装git-bash二、使用步骤1.引入库2.读入数据总结 前言 放弃keil,iar收费IDE,使用开源工具开发编译arm单片机程序。 一、安装git-bash gitforwindos下载并安装gitbash 二、使用步骤 1.引入库 代码如下(示例): import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import warnings warnin

m0_46535940的博客 4056

app和bootloader跳转 MSP与PSP

1.不要把跳转函数放在中断中,如此导致在跳转后的app或者bootloder都是在中断状态,只要你一开启该中断,就可能出现硬件中断了 2.如果你的APP使用了ucos系统,在跳转函数中还需要增加__set_CONTROL(0);//把psp修改成msp;这样是为了把ucos系统中的psp置回msp,否则容易出现硬件中断 MSP和PSP 的含义是Main_Stack_Pointer 和Proce...

weixin_30872337的博客 2094

告别CubeIDE!用VSCode+ST官方插件打造你的STM32开发环境(附1.9.0版本路径配置避坑)

本文详细介绍了如何从STM32CubeIDE迁移到VSCode+ST官方插件的开发环境,提升STM32开发效率。通过对比分析VSCode与STM32CubeIDE的性能差异,提供完整的工具链配置指南、项目迁移步骤及调试技巧,帮助开发者打造高效、轻量级的STM32开发工作流。

918

STM32CubeMX 6.12.0新功能实测:一键生成CMake工程,在Mac/Linux上也能愉快玩转STM32

STM32CubeMX 6.12.0版本引入原生CMake支持,结合VSCode插件实现跨平台开发,显著提升STM32开发效率。本文详细解析新工具链架构,提供从环境配置到工程创建的实战指南,并分享CMake工程改造、调试优化等高级技巧,助力开发者摆脱传统IDE束缚,拥抱现代化嵌入式开发工作流。

weixin_42531923的博客 382

VSCode+CMake+ARM GCC打造现代化STM32开发环境全攻略

嵌入式开发中,构建系统是连接源代码与硬件执行文件的关键桥梁,它负责管理编译、链接等复杂流程。CMake作为跨平台的构建系统生成器,通过抽象的CMakeLists.txt描述项目结构,能自动生成适应不同操作系统的本地构建文件(如Makefile),解决了传统Makefile在Windows与Unix-like系统间的兼容性问题。这一技术价值在于实现了开发环境的一致性,大幅提升了团队协作与跨平台部署效率。在嵌入式领域,尤其是基于ARM Cortex-M内核的STM32开发中,结合ARM GCC交叉编译工具链,C

weixin_30697239的博客 306

VSCode调试嵌入式:除了JLink,你的GCC工具链选对了吗?(arm-none-eabi版本避坑指南)

本文深入探讨了VSCode调试嵌入式系统时GCC工具链版本选择的关键问题,特别是arm-none-eabi版本的兼容性挑战。通过分析不同版本特性、常见调试故障排查方法及工具链管理策略,帮助开发者避免架构不匹配、寄存器识别失败等典型问题,提升嵌入式开发效率。

chenqiaodezhi57164的博客 462

Ubuntu 22.04 下 STM32F1 开发环境搭建:gcc-arm-none-eabi-10.3 + OpenOCD 0.12.0 完整配置

本文详细介绍了在Ubuntu 22.04系统下搭建STM32F1开发环境的完整流程,包括gcc-arm-none-eabi-10.3工具链安装、OpenOCD 0.12.0配置、工程编译与烧录实战。通过清晰的步骤指导和常见问题解决方案,帮助开发者快速构建高效的嵌入式Linux开发环境,提升STM32开发效率。

chouxuyi9789的博客 444

从零构建:WSL2 + VSCode + STM32CubeMX的嵌入式开发工作流全解析

本文详细解析了基于WSL2、VSCode和STM32CubeMX构建现代化STM32嵌入式开发工作流的完整流程。内容涵盖环境配置、工具链集成、CMake构建系统配置以及OpenOCD调试技巧,旨在帮助开发者打造高效、跨平台的开发环境,显著提升嵌入式开发效率。

efc1234567的博客 1042

Linux下搭建VSCode+CMake+GCC+OpenOCD的STM32开发环境全攻略

嵌入式开发通常涉及在资源受限的微控制器上编写高效、可靠的软件,而STM32作为业界广泛使用的ARM Cortex-M系列MCU,其开发流程的优化至关重要。传统的IDE(如Keil、IAR)虽然易用,但在自动化、定制化和与现代化开发流程集成方面存在局限。通过理解交叉编译的原理,开发者可以构建一套透明、可脚本化的工具链,从而实现对编译、链接、烧录和调试全流程的精细控制。这种基于开源工具链(如GCCCMake、OpenOCD)的方案,不仅降低了许可成本,更便于实现持续集成和自动化测试,尤其适合在Linux服务器

weixin_30892889的博客 308

告别Keil,用VSCode+Arm-GCC搭建免费STM32开发环境(保姆级避坑指南)

本文详细介绍了如何从Keil迁移到VSCode+Arm-GCC搭建免费STM32开发环境的完整流程,包括工具链配置、构建系统选择、VSCode插件优化及调试技巧。通过科学配置arm-none-eabi-gcc工具链和CMake构建系统,开发者可获得比传统IDE更强大的开发体验,特别适合预算有限但追求效率的硬件团队。

weixin_33713503的博客 334

告别Keil!用VSCode+GCC+CMake搭建STM32开发环境(STM32F103实战)

本文详细介绍了如何从Keil迁移到VSCode+GCC+CMake的现代化STM32开发环境,以STM32F103为例,涵盖环境配置、工程迁移、CMake构建、调试下载等关键步骤。通过开源工具链,开发者可以显著提升编译效率,实现跨平台开发,同时降低商业软件授权成本。

dida4700的博客 413

CLion配置STM32开发环境:从ARM GCC到OpenOCD全流程指南

在嵌入式开发领域,集成开发环境(IDE)的选择直接影响开发效率与代码质量。传统IDE如Keil、IAR虽然稳定,但代码编辑与项目管理功能相对薄弱。现代跨平台C/C++ IDE通过智能代码补全、重构和深度调试集成,显著提升了嵌入式开发的工程实践体验。其技术价值在于将开发者从繁琐的编辑器操作中解放,聚焦于硬件交互与系统架构设计。应用场景涵盖从单片机到复杂嵌入式系统的全流程开发,尤其适合追求代码质量与团队协作的项目。本文以STM32开发为例,详细解析如何利用CLion配合ARM GCC工具链和OpenOCD调试器

weixin_30383279的博客 386

STM32开发环境搭建避坑指南:搞定gcc-arm-none-eabi版本冲突与切换

本文详细介绍了在STM32开发环境中如何解决gcc-arm-none-eabi版本冲突与切换问题。通过多版本共存方案、环境变量动态切换和项目级版本锁定等方法,帮助开发者高效管理不同版本的编译器,确保项目顺利编译。特别适用于Ubuntu系统下的嵌入式开发环境搭建。

weixin_30938149的博客 205

stm32-cube-cmake-vscode项目实战:从CubeIDE迁移到VSCode的完整步骤

stm32-cube-cmake-vscode项目提供了将STM32开发环境从CubeIDE迁移到VSCode的完整解决方案,让开发者能够利用VSCode的轻量与高效进行STM32项目开发。本文将详细介绍迁移的每一个关键步骤,帮助新手快速上手这一强大工具。 ## 为什么选择从CubeIDE迁移到VSCode? STM32CubeIDE作为ST官方开发环境,虽然功能全面但体积庞大,启动速度较慢。

gitblog_00452的博客 1046

告别Keil/IAR:手把手教你用GNU ARM Toolchain为STM32编译第一个程序

本文详细介绍了如何使用GNU ARM Toolchain为STM32编译第一个程序,从环境搭建、项目结构设计到编写Makefile和调试技巧,全面指导开发者从Keil/IAR迁移到命令行工具链。通过实战案例和进阶技巧,帮助开发者掌握免费、跨平台的ARM开发工具链,提升嵌入式开发效率。

weixin_30336061的博客 361

VSCode Cmake GCC STM32开发环境搭建(寄存器版本程序移植)

目前安装的插件,可能有重复功能插件,需自行判断。

nanshannanbeihaibei的博客 364
上一篇: Use std::functional and std::bind in STM32 project
下一篇: jlink gdb server with arm-none-eabi-gdb
不纯洁的锌
博客等级 码龄14年 56粉丝 36原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值