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

clouds-hyhy
Posts: 8
Joined: Thu Apr 15, 2021 7:37 am

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

Postby clouds-hyhy » Wed Apr 21, 2021 12:03 pm

如题,在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 <M5Core2.h>并正常使用M5的API,
但在components/MyProject/*.c或者*.cpp中,#include <M5Core2.h> 或者#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 :(

ESP_Gargamel
Posts: 786
Joined: Wed Nov 14, 2018 8:45 am

Re: 怎样从esp-idf构建的工程中的任意位置调用第三方库的API

Postby ESP_Gargamel » Wed Apr 21, 2021 1:05 pm

要不你把你的示例工程推到 github 或 gitee?不然单靠你这些信息,分析比较慢。

clouds-hyhy
Posts: 8
Joined: Thu Apr 15, 2021 7:37 am

Re: 怎样从esp-idf构建的工程中的任意位置调用第三方库的API

Postby clouds-hyhy » Tue Apr 27, 2021 7:25 am

一通各种尝试后,发现把*.c文件名全部改成*.cpp后就解决了。 :D

之前用Arduino IDE也发生过类似的问题,*.ino和*.cpp(*.c)之间可以相互调用自己的函数,
但第三方API只能在.cpp里使用,*.c就会报错。
网上搜了哈也没找到理由,只是说不要用.c,用.cpp。 :o

ESP_Gargamel
Posts: 786
Joined: Wed Nov 14, 2018 8:45 am

Re: 怎样从esp-idf构建的工程中的任意位置调用第三方库的API

Postby ESP_Gargamel » Tue Apr 27, 2021 12:55 pm

比较奇怪,首先这个头文件应该在 include 路径里,比如在 M5Core2 目录下的 component.mk 里设置 include 路径 COMPONENT_ADD_INCLUDEDIRS := M5Core2/src,把从M5stack 官方 git 拉的 M5Core2 放在 components/M5Core2 目录下。
你可以用 make V=1 看一下编译你 MyProject 目录下的文件时所有的 include 目录,是否包含 M5Core2 的。
另外,在 c 文件中包含 c++ 的头文件,这个本来也就会错误,你还是要用 cpp。

Who is online

Users browsing this forum: No registered users and 57 guests