乐鑫技术交流
直播中

李麒铭

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

idf4.4在cmakelists中设置了main.cpp依然找不到app_main ?为什么?

以前在4.2 中可以成功编译,现在换到idf 4.4 后 找不到app_main ?

/../riscv32-esp-elf/bin/ld.exe: esp-idf/freertos/libfreertos.a(port_common.c.obj): in function `main_task':
H:/Espressif/frameworks/esp-idf-v4.4/components/freertos/port/port_common.c:117: undefined reference to `app_main'

以下是 cmakelists
set(SOURCES ./Src/main.cpp
            ./Src/ringbufferUart.cpp
            ./Src/app_tasks.cpp
            ./Src/md5.cpp
            ./Src/util.cpp
            ./Src/app_ble.c
            ./Src/SI522A_interface.c
            ./Src/SI522A_App.c
            ./Src/myspi.c)


idf_component_register(SRCS ${SOURCES}
                        INCLUDE_DIRS "." "Inc"
                        REQUIRES freertos esp_common nvs_flash bt)

请问有人可以指点一下吗
                                                                                                                                                                  

回帖(1)

美信电子

2024-6-17 17:48:48
在 ESP-IDF v4.4 中,如果你在 CMakeLists.txt 文件中设置了 main.cpp,但是编译时仍然找不到 app_main 函数,可能是由于以下几个原因:

1. **CMakeLists.txt 文件格式问题**:请确保你的 CMakeLists.txt 文件格式正确,特别是在设置 SOURCES 时。你提供的代码片段中,SOURCES 的设置似乎有些问题,可能是因为空格和换行的使用不正确。正确的设置应该是这样的:

   ```cmake
   set(SOURCES
       "./Src/main.cpp"
       "./Src/ringbufferUart.cpp"
   )
   ```

2. **组件依赖问题**:确保你的项目依赖了正确的组件。在 CMakeLists.txt 文件中,使用 `idf_component_register` 函数来注册组件依赖。例如:

   ```cmake
   idf_component_register(
       SRCS "${SOURCES}"
       INCLUDE_DIRS "."
   )
   ```

3. **app_main 函数定义问题**:确保你的 main.cpp 文件中定义了 app_main 函数。这个函数是 ESP-IDF 启动时调用的入口函数。例如:

   ```cpp
   extern "C" void app_main();
   void app_main() {
       // 你的代码
   }
   ```

4. **项目配置问题**:检查你的 ESP-IDF 项目配置,确保没有其他错误或遗漏。例如,检查 `sdkconfig` 文件和 `menuconfig` 设置。

5. **ESP-IDF 版本问题**:虽然你提到从 4.2 升级到 4.4,但请确保你使用的是正确的 ESP-IDF 版本。你可以通过以下命令来检查和更新 ESP-IDF:

   ```bash
   git -C $IDF_PATH pull
   ./install.sh
   ```

6. **编译器/链接器问题**:如果以上步骤都无法解决问题,可能是编译器或链接器的问题。尝试清理项目并重新编译:

   ```bash
   idf.py clean
   idf.py build
   ```

如果问题仍然存在,请提供更多的项目信息,例如 CMakeLists.txt 文件的完整内容,以便进一步分析问题。
举报

更多回帖

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