gpt4 book ai didi

c - 查找 `undefined reference` 错误的根本原因

转载 作者:行者123 更新时间:2023-12-03 20:18:24 25 4
gpt4 key购买 nike

我试图理解为什么我会收到 undefined reference链接时出错:

/home/amirgon/projects/esp8266/esp-open-sdk/xtensa-lx106-elf/bin/xtensa-lx106-elf-gcc -L/home/amirgon/projects/esp8266/esp-open-sdk/sdk/lib -T/home/amirgon/projects/esp8266/esp-open-sdk/sdk/ld/eagle.app.v6.cpp.ld -nostdlib -Wl,--no-check-sections -u call_user_start -Wl,-static -Wl,--start-group -lc -lgcc -lhal -lphy -lpp -lnet80211 -llwip -lwpa -lmain build/app_app.a -Wl,--end-group -o build/app.out
build/app_app.a(routines.o):(.text+0x4): undefined reference to `pvPortMalloc(unsigned int, char const*, int)'

gcc 提示它找不到函数 pvPortMalloc .
然而, 我可以确认此功能存在于 libmain.a !

在上面的命令行中,libmain 被 -lmain 引用并且库路径设置为 -L/home/amirgon/projects/esp8266/esp-open-sdk/sdk/lib .
当我从 libmain.a 转储符号时在这条路上我可以找到 pvPortMalloc标记为 T ,这意味着符号在文本(代码)部分:
/home/amirgon/projects/esp8266/esp-open-sdk/xtensa-lx106-elf/bin/xtensa-lx106-elf-nm -g /home/amirgon/projects/esp8266/esp-open-sdk/sdk/lib/libmain.a | grep pvPortMalloc
U pvPortMalloc
0000014c T pvPortMalloc
U pvPortMalloc

那么,我错过了什么吗?
尽管函数存在于 libmain.a 中,但 gcc 找不到该函数的原因可能是什么?
如何进一步调试此错误?

最佳答案

C++ 和 C 代码的混合会导致您的问题。

这个错误:

undefined reference to `pvPortMalloc(unsigned int, char const*, int)'

不说符号 pvPortMalloc找不到。它说符号 pvPortMalloc(unsigned int, char const*, int)找不到,
这是一个 C++ 符号。

这意味着您在编译 C++ 代码的某个地方认为存在 C++ pvPortMalloc函数,其符号也包含其签名,但您只有一个 pvPortMalloc C 函数。

可能你的 C++ 代码包含一个不是 C++ 干净的头文件,你需要做这样的事情:
extern "C" {
#include "some_header.h"
}

其中 some_header.h 是声明 pvPortMalloc 函数的头文件。

关于c - 查找 `undefined reference` 错误的根本原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40431563/

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