乐鑫技术交流
直播中

赵敏

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

如何从esp-idf构建的工程中的任意位置调用第三方库的API?

如题,在win10中,通过msys2,根据官方文档v3.3.4说明,构建了一个M5Core2的开发环境,工程目录如下
M5stackCore2Sample(Makefile之类的文件省略)
________|---------build(make后自动生成的文件)
________|---------esp-idf(从esp官方git下载,v3.3.4)
________|---------main(根据官方文档,新建的)
__________________|---------main.cpp
__________________|---------component.mk
________|---------components(根据官方文档,新建的)
__________________|---------arduino-esp32(从esp官方git下载,v1.0.5)
__________________|---------M5Core2(从M5stack官方git下载,最新,版本号不详)
____________________________|---------component.mk
__________________|---------MyProject(外部项目,内含许多*.h *.c *.cpp)
____________________________|---------component.mk

现在的问题是,在main/main.cpp中,可以#include 并正常使用M5的API,
但在components/MyProject/*.c或者*.cpp中,#include  或者#include “M5Core2.h”之后报错
M5Core2.h:no such file or directory,这是为什么啊?请问有什么解决办法吗?

以下方法尝试过后仍然未能通过编译:
1.把components里的内容全部cut到main中,并修改main中的component.mk
->build好像通过了,但最后link的时候,unreferenced  app_main之类的错误(感觉跟esp的文件有关)
2.在components/MyProject/*.c或者*.cpp中,#include M5Core2.h的相对路径
->M5Core2.h里#include的其他文件又又no such file or directory
                                                                                                                                                               

回帖(1)

哈哈哈

2024-6-22 15:29:59
要从ESP-IDF构建的工程中的任意位置调用第三方库的API,您需要遵循以下步骤:

1. **下载并集成第三方库**:
   您已经提到了从ESP官方Git下载了arduino-esp32库。确保您已经将这个库放在了正确的位置。通常,它应该放在`components`目录下。

2. **在`component.mk`文件中添加依赖**:
   打开`main`目录下的`component.mk`文件,添加对第三方库的依赖。例如,如果您正在使用arduino-esp32库,您可以添加以下行:
   ```makefile
   COMPONENT_ADD_INCLUDEDIRS := $(COMPONENT_PATH)/arduino-esp32
   COMPONENT_PRIV_INCLUDEDIRS := $(COMPONENT_PATH)/arduino-esp32
   ```

3. **在`CMakeLists.txt`文件中添加依赖**:
   如果您的项目使用CMake构建系统,您需要在`CMakeLists.txt`文件中添加对第三方库的依赖。例如:
   ```cmake
   idf_component_register(INCLUDE_DIRS "components/arduino-esp32"
                       PRIV_INCLUDE_DIRS "components/arduino-esp32"
                       REQUIRES "esp32")
   ```

4. **在源代码中包含库头文件**:
   在您的源代码文件中,例如`main.cpp`,使用`#include`指令包含所需的头文件。例如:
   ```cpp
   #include "components/arduino-esp32/SomeLibrary.h"
   ```

5. **调用第三方库的API**:
   在您的源代码中,现在您可以调用第三方库的API。例如:
   ```cpp
   SomeLibraryClass someLibraryObject;
   someLibraryObject.someFunction();
   ```

6. **构建项目**:
   使用`idf.py`命令构建您的项目。在项目根目录下打开命令行或终端,然后执行以下命令:
   ```bash
   idf.py build
   ```

7. **烧录和测试**:
   构建成功后,使用`idf.py`命令烧录您的设备并测试第三方库的API是否正常工作:
   ```bash
   idf.py -p [您的设备端口] flash
   ```

通过遵循这些步骤,您应该能够从ESP-IDF构建的工程中的任意位置调用第三方库的API。如果您遇到任何问题,请检查库的集成和依赖是否正确设置。
举报

更多回帖

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