《ESP32调试异常集锦》之:程序编译失败,提示undefined reference to `dedic_gpio_bundle_write‘

项目场景:

硬件:ESP32-LyraT-Mini V1.2开发板,使用的是ESP32-WROVER-E 模组。

程序:基于soft_i2c示例程序修改协议内容实现与TM1640通信测试


问题描述

编译失败,"full clean"后重新编译依旧失败。没有语法错误,错误提示如下:

[922/924] Linking CXX executable soft_i2c.elf
FAILED: soft_i2c.elf
cmd.exe /C "cd . && E:\.espressif\tools\xtensa-esp-elf\esp-13.2.0_20230928\xtensa-esp-elf\bin\xtensa-esp32-elf-g++.exe -mlongcalls -Wno-frame-address  -fno-builtin-memcpy -fno-builtin-memset -fno-builtin-bzero -fno-builtin-stpcpy -fno-builtin-strncpy -Wl,--cref -Wl,--defsym=IDF_TARGET_ESP32=0 -Wl,--Map=D:/WillRush/ESP32_AIToy_Project/Project/soft_i2c/build/soft_i2c.map -Wl,--no-warn-rwx-segments -fno-rtti -fno-lto -Wl,--gc-sections -Wl,--warn-common -T esp32.peripherals.ld -T esp32.rom.ld -T esp32.rom.api.ld -T esp32.rom.libgcc.ld -T esp32.rom.newlib-data.ld -T esp32.rom.syscalls.ld -T esp32.rom.newlib-funcs.ld -T memory.ld -T sections.ld @CMakeFiles\soft_i2c.elf.rsp -o soft_i2c.elf  && cd ."
E:/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20230928/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld.exe: esp-idf/soft_2wire_master/libsoft_2wire_master.a(soft_2wire_master.c.obj):(.literal.set_din+0x0): undefined reference to `dedic_gpio_bundle_write'
E:/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20230928/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld.exe: esp-idf/soft_2wire_master/libsoft_2wire_master.a(soft_2wire_master.c.obj):(.literal.soft_2wire_master_new+0x14): undefined reference to `dedic_gpio_new_bundle'
E:/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20230928/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld.exe: esp-idf/soft_2wire_master/libsoft_2wire_master.a(soft_2wire_master.c.obj):(.literal.soft_2wire_master_del+0x8): undefined reference to `dedic_gpio_del_bundle'
E:/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20230928/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld.exe: esp-idf/soft_2wire_master/libsoft_2wire_master.a(soft_2wire_master.c.obj): in function `set_din':
D:/WillRush/ESP32_AIToy_Project/Project/soft_i2c/components/soft_2wire_master/soft_2wire_master.c:180:(.text.set_din+0xa): undefined reference to `dedic_gpio_bundle_write'
E:/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20230928/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld.exe: esp-idf/soft_2wire_master/libsoft_2wire_master.a(soft_2wire_master.c.obj): in function `set_sclk':
D:/WillRush/ESP32_AIToy_Project/Project/soft_i2c/components/soft_2wire_master/soft_2wire_master.c:174:(.text.emulate_start+0xe): undefined reference to `dedic_gpio_bundle_write'
E:/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20230928/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld.exe: esp-idf/soft_2wire_master/libsoft_2wire_master.a(soft_2wire_master.c.obj): in function `set_din':
D:/WillRush/ESP32_AIToy_Project/Project/soft_i2c/components/soft_2wire_master/soft_2wire_master.c:180:(.text.emulate_start+0x22): undefined reference to `dedic_gpio_bundle_write'
E:/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20230928/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld.exe: D:/WillRush/ESP32_AIToy_Project/Project/soft_i2c/components/soft_2wire_master/soft_2wire_master.c:180:(.text.emulate_start+0x36): undefined reference to `dedic_gpio_bundle_write'
E:/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20230928/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld.exe: esp-idf/soft_2wire_master/libsoft_2wire_master.a(soft_2wire_master.c.obj): in function `set_sclk':
D:/WillRush/ESP32_AIToy_Project/Project/soft_i2c/components/soft_2wire_master/soft_2wire_master.c:174:(.text.emulate_write_byte+0x1e): undefined reference to `dedic_gpio_bundle_write'
E:/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20230928/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld.exe: esp-idf/soft_2wire_master/libsoft_2wire_master.a(soft_2wire_master.c.obj):D:/WillRush/ESP32_AIToy_Project/Project/soft_i2c/components/soft_2wire_master/soft_2wire_master.c:174: more undefined references to `dedic_gpio_bundle_write' follow
E:/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20230928/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld.exe: esp-idf/soft_2wire_master/libsoft_2wire_master.a(soft_2wire_master.c.obj): in function `soft_2wire_master_new':
D:/WillRush/ESP32_AIToy_Project/Project/soft_i2c/components/soft_2wire_master/soft_2wire_master.c:83:(.text.soft_2wire_master_new+0xf4): undefined reference to `dedic_gpio_new_bundle'
E:/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20230928/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld.exe: D:/WillRush/ESP32_AIToy_Project/Project/soft_i2c/components/soft_2wire_master/soft_2wire_master.c:86:(.text.soft_2wire_master_new+0x117): undefined reference to `dedic_gpio_bundle_write'
E:/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20230928/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld.exe: esp-idf/soft_2wire_master/libsoft_2wire_master.a(soft_2wire_master.c.obj): in function `soft_2wire_master_del':
D:/WillRush/ESP32_AIToy_Project/Project/soft_i2c/components/soft_2wire_master/soft_2wire_master.c:108:(.text.soft_2wire_master_del+0x2b): undefined reference to `dedic_gpio_del_bundle'
collect2.exe: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.

原因分析:

从错误提示上看应该是"soft_2wire_master.c"中没有包含相关头文件。实际上程序中是有包含头文件。

#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_rom_sys.h"
#include "esp_check.h"
#include "driver/dedic_gpio.h"
#include "driver/gpio.h"
#include "soft_2wire_master.h"

是编译时文件没有链接成功么?
该程序是基于示例程序soft_i2c程序生成、修改的。重新基于soft_i2c生成项目,full clean后重新编译存在相同问题。

查了资料可能原因:

1、dedic_gpio_bundle_write等函数为static的类型,无法被外部调用;

"ctrl+左键,单击出问题的函数,发现其并未定义为static类型,该原因排除"

2、未链接到对应的.c文件;

从报错内容看,错误来源soft_2wire_master.c文件中,对于dedic_gpio.h文件的使用有结构体类型和函数。跟函数相关的调用全部报错,但是并没有报错结构体类型。如果注释掉dedic_gpio.h中的结构体类型定义,编译则直接报错unknown type name。至少说明了.h文件确实是参与编译了的
"组件文件夹下的CMakelists文件中 --PRIV_REQUIRES driver-- 将该语句去掉编译时直接报错,包含的头文件找不到driver,基本验证了至少链接时是链接了driver文件的 "
.h包含了,与.c文件相关的函数调用全部报错,有可能是.c文件没有参与参与编译
发现问题,项目中build文件夹->esp-idf->driver->gpio文件夹下面只生成了3个.obj文件,并没有包含dedic_gpio的。找到esp-idf文件夹->driver文件夹,打开CMakeLists文件,搜索"dedic"发现有一个相关的宏定义 --CONFIG_SOC_DEDICATED_GPIO_SUPPORTED-- 项目中全局搜索该宏定义,并未发现
在这里插入图片描述
在这里插入图片描述
如果直接在build->config->sdkconfig.h中增加#define CONFIG_SOC_DEDICATED_GPIO_SUPPORTED 1或者在sdkconfig.cmake中手动增加,编译后依旧报错,且手动增加的部分会消失,build目录是自动生成的。而main->Kconfig.projbuild内用户可自定义宏定义(配置页面中sample相关配置就是在该处实现的)但CONFIG_SOC开头的是默认规格宏,不应该在此自行定义。
在sdkconfig.default中自行增加CONFIG_SOC_DEDICATED_GPIO_SUPPORTED=y 可手动修改保存,但编译依旧报相同错误

参考源:https://www.cnblogs.com/lifan3a/articles/18120965

换个思路,既找不到宏定义,又不能添加宏定义,直接取消宏定义判断,每次都编译"dedic_gpio.c"文件,试试呢。 打开esp-idf文件夹->driver文件夹->CMakeLists,直接在一直编译的源文件中加入"gpio/dedic_gpio.c",编译时报错如下图所示。
在这里插入图片描述

E:/esp/esp-idf/components/driver/gpio/dedic_gpio.c:22:10: fatal error: hal/dedic_gpio_cpu_ll.h: No such file or directory22 | #include "hal/dedic_gpio_cpu_ll.h"|          ^~~~~~~~~~~~~~~~~~~~~~~~~

实际查看E:\esp\esp-idf\components\hal\include\hal文件夹中确实没有dedic_gpio_cpu_ll.h。在整个hal文件夹中搜索dedic,发现与芯片型号有关。当前测试使用的ESP32-LyraT-Mini V1.2开发板是ESP32-WROVER-E 模组,芯片是ESP32-D0WD-V3 和 ESP32-D0WDR2-V3,也就是压根不支持该功能。
在这里插入图片描述

3、因为宏定义或者其他问题,导致dedic_gpio_bundle_write等函数未编译,导致调用时提示未定义;

在第2点中发现该问题


解决方案:

最终,无解决方案。发现问题:调用的函数当前开发板所用芯片不支持…针对出问题的程序段,用其他方式重新编写。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1544441.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

EasyGBD国标GB28181设备端,支持GB28181-2016、GB28181-2022

功能概要: 功能概述:EasyGBD是GB/T28181 Device的简称,指国标GB28181协议的设备端。EasyGBD功能组件支持Windows、Linux、Android、iOS、ARM等所有平台,可兼容国标GB28181-2011、GB28181-2016的全部功能。 操作系统:任…

SOMEIP_ETS_127: SD_Multicast_FindService

测试目的: 验证DUT能够对10个多播FindService消息做出响应,这些消息每100ms发送一次,请求有效的服务/实例ID(取决于DUT),DUT需要使用单播OfferService消息来回答。 描述 本测试用例旨在确保DUT能够正确处…

爆火南卡开放式耳机,音质性能霸榜TOP1,行业唯一达专业HiFi级音质标准!

爆火南卡开放式耳机,音质性能霸榜TOP1,行业唯一达专业HiFi级音质标准! 随着科技的不断进步,耳机市场迎来了又一次革命性的创新。南卡(NANK)品牌近日宣布,其最新力作——南卡Ultra耳夹开放式耳机…

阿里发电预测模型:FusionSF

论文《FusionSF: Fuse Heterogeneous Modalities in a Vector Quantized Framework for Robust Solar Power Forecasting》 目前的研究主要依赖于历史太阳能数据或单模态格式的数值天气预报,忽略了不同模态提供的补充信息。 本文提出一个多模态融合框架&#xff0…

element下拉框联动 或 多选 回显数据后页面操作不生效问题解决

第一种:多选回显不生效 解决方式: 代码: <el-form-item label"系统" prop"Key"> <el-select v-model"addForm.Key" multiple placeholder"请选择" change"$forceUpdate()"> <el-option v-for"item …

史上最详细泛微Ecology9安装教程及安装包(含注册)

在现代企业中&#xff0c;泛微Ecology9 已成为高效的办公自动化管理系统之一&#xff0c;帮助企业在流程管理、信息协同等方面实现快速发展。本篇文章将为您详细介绍泛微Ecology9的安装过程&#xff0c;并提供最新的安装包下载&#xff0c;包含完整的注册信息&#xff0c;助您快…

盲盒小程序|探寻盲盒乐趣,开发专属商城

随着潮流文化的不断发展&#xff0c;盲盒作为一种独特的消费模式&#xff0c;越来越受到年轻人的喜爱。在盲盒玩具的世界里&#xff0c;每一次开启都像是打开神秘宝盒&#xff0c;不知道会有什么惊喜等待着你。无论是收集可爱的公仔&#xff0c;还是寻找珍稀的限定版&#xff0…

Vulnhub:Fowsniff 1

靶机下载地址 信息收集 主机发现 nmap 192.168.31.0/24 -Pn -T4 靶机ip&#xff1a;192.168.31.134 端口扫描 nmap 192.168.31.134 -A -p- -T4 开放端口22(ssh)、80(http)&#xff0c;和两个明文传输的邮件端口110(pop3)、143(imap)。 HTTP 访问http://192.168.31.134。…

线程池工作原理?

线程池的工作原理&#xff1a; 当任务过来时&#xff0c;如果线程池中的线程数小于核心线程数&#xff0c;就创建线程。&#xff08;默认情况下&#xff0c;线程池不会预先创建线程&#xff0c;但可以配置&#xff09;当核心线程数满了以后&#xff0c;提交过来的任务会放到阻塞…

公司可以看到员工电脑在干嘛吗?四种监控员工电脑的方式

想象一下&#xff0c;你刚打开电脑&#xff0c;准备浏览最新的娱乐新闻&#xff0c;突然想到&#xff1a;“我的老板能看到我在干嘛吗&#xff1f;” 随着企业对工作效率和信息安全的关注日益增加&#xff0c;越来越多的公司开始采用各种方式来监控员工的电脑使用情况。 那么…

Java语言程序设计基础篇_编程练习题**18.38 (递归树)

目录 题目&#xff1a;**18.38 (递归树) 代码示例 代码逻辑解释 类定义和变量初始化 main 方法 start 方法 drawRecursiveTree 方法 输出结果 题目&#xff1a;**18.38 (递归树) 编写一个程序来显示一个递归树&#xff0c;如图18-20所示 代码示例 编程练习题18_38Re…

git push错误:Out of memory, malloc failed (tried toallocate 947912704 bytes)

目录 一、错误截图 二、解决办法 一、错误截图 因项目文件过大&#xff0c;http.postBuffer设置的内存不够&#xff0c;所以报错。 二、解决办法 打开cmd窗口&#xff0c;执行如下命令即可 git config --global http.postBuffer 1024000000 如图所示 执行完成以后&#…

ABAP 学习t-code DWDM

ABAP 学习t-code DWDM &#xff0c;里面有很多例子展示&#xff0c;且能看到源代码

netty编程之我就非得用你,我用Java nio咋就不行?

写在前面 netty啊&#xff0c;我就非得用你&#xff0c;我用Java nio咋就不行&#xff1f; 1&#xff1a;我们都要做什么&#xff1f; 比如我们想要实现一个http的服务器&#xff0c;如果是直接基于Java nio来做的话&#xff0c;就需要来解析http协议&#xff0c;不小的工作…

第十七节 鼠标的操作与相应

知识点 -event代表鼠标事件类型 -EVENT_LBUTTONDOWN鼠标左键按下 -EVENT_LBUTTONUP鼠标左键抬起 -EVENT_LBUTTONMOVE鼠标及移动 Point sp(-1, -1); Point ep(-1, -1); Mat temp; static void on_draw(int event, int x, int y, int flags, void* userdata) { Mat imag…

通过 OBD Demo 体验 OceanBase 4.3 社区版

本文作者&#xff1a;马顺华 引言 OceanBase 4.3 是一个专为实时分析 AP 业务设计的重大更新版本。它基于LSM-Tree架构&#xff0c;引入了列存引擎&#xff0c;实现了行存与列存数据存储的无缝整合。这一版本不仅显著提升了AP场景的查询性能&#xff0c;同时也确保了TP业务场景…

RT-DETR

SSE represents the single-scale Transformer encoder&#xff0c;CSF represents cross-scale fusion. AIFI and CCFF are the two modules designed into 作者的 hybrid encoder 截止到发文时间的issue数&#xff0c;多吓人呐&#xff0c;不建议复现

从Servlet+JSP+JDBC到MyBatis:重构用户CRUD操作的高效之旅

前言 原生的JDBC&#xff1a; 原生的JDBC操作数据库&#xff0c;书写较为繁琐&#xff0c;降低开发效率。JDBC的局限性&#xff08;如代码冗余、SQL语句与Java代码紧密耦合、难以维护等&#xff09;。 相比于JDBC&#xff0c;Mybatis的优势&#xff1a; SQL与Java代码的分离、强…

性能测试工具——JMeter

目录 一、JMeter介绍 1、下载安装JMeter 2、打开JMeter 方式一&#xff1a; 方式二&#xff1a; 3、JMeter基础设置 4、JMeter基本使用流程 &#xff08;1&#xff09;启动JMeter &#xff08;2&#xff09;在测试计划下添加线程组 &#xff08;3&#xff09;在 “线…

Linux权限修改及管理员权限获取

在网上看到的&#xff0c;自己当作字典记录下来 修改文件权限&#xff1a;chmod 使用 chmod 可以修改文件权限。 两种方式&#xff1a;字母法与数字法 一&#xff0c;字母法修改文件权限 例如&#xff1a;文件名为 test.x 给文件 test.x 添加所有用户都能执行的权限&#x…