乐鑫技术交流
直播中

李娜

7年用户 1587经验值
私信 关注
[问答]

编译错误提示undefined reference to app_main的原因?

开始准备将已有项目porting到esp32,采用v4.0 的esp-idf。 但是在编译的时候遇到以下问题

build/esp32/libesp32.a(cpu_start.o): in function `main_task':
/home/fhe/esp/esp-idf/components/esp32/cpu_start.c:556: undefined reference to `app_main'

程序结构如下
esp_idf (文件夹 esp32 sdk)
main.c  
Makefile
在console下直接运行make出现上述错误

Makefile内容如下
PROJECT_NAME := test
include $(IDF_PATH)/make/project.mk

main.c 内容如下
#include
void app_main(void)
{
    printf("Hellon");
}
请问是否需要在哪里指定ld参数以便系统能够找到app_main的地址。

回帖(1)

李梅

2024-6-25 17:05:33
根据您提供的信息,编译错误提示 "undefined reference to `app_main`" 是因为在链接过程中,链接器找不到 `app_main` 函数的定义。这通常是因为以下几个原因:

1. 确保 `app_main` 函数在您的代码中已经定义。从您提供的 `main.c` 内容来看,`app_main` 函数的定义似乎不完整。您需要确保 `app_main` 函数的定义如下:

```c
void app_main(void) {
    printf("Hello, world!n");
}
```

2. 确保 `app_main` 函数在您的项目中是唯一的。如果有多个 `app_main` 函数定义,可能会导致链接错误。

3. 确保 `app_main` 函数在您的项目中是可访问的。如果 `app_main` 函数在一个头文件中声明,确保该头文件在 `main.c` 中被包含。

4. 检查您的 `Makefile` 是否正确设置。从您提供的 `Makefile` 内容来看,它看起来是正确的。但是,您可以确保 `PROJECT_NAME` 和 `IDF_PATH` 变量设置正确。例如:

```makefile
PROJECT_NAME := test
IDF_PATH := /path/to/your/esp-idf
include $(IDF_PATH)/make/project.mk
```

5. 确保您的项目结构正确。通常,ESP-IDF 项目结构如下:

```
- project
  - main
    - main.c
  - Makefile
```

6. 如果以上步骤都无法解决问题,尝试清理项目并重新编译。在项目根目录下运行以下命令:

```bash
make clean
make
```

按照这些步骤检查和修改您的项目,应该可以解决 "undefined reference to `app_main`" 的编译错误。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分