Protocol buffers 将Google Protobuffers(C+;+;)与ESP-IDF一起使用 我试图用我的IDF项目使用一些C++原缓冲文件,但我有一些问题要解决。我已经在test.proto文件上使用protoc生成了test.pb.cc和test.pb.h文件。当我尝试运行“make”时,编译test.pb.cc时失败,并显示以下错误消息: In file included from /Users/ethan/Documents/Development/project/components/component/test/test/test.cpp:2:0: /Users/ethan/Documents/Development/project/components/component/test/test/test.pb.h:10:40: fatal error: google/protobuf/port_def.inc: No such file or directory

Protocol buffers 将Google Protobuffers(C+;+;)与ESP-IDF一起使用 我试图用我的IDF项目使用一些C++原缓冲文件,但我有一些问题要解决。我已经在test.proto文件上使用protoc生成了test.pb.cc和test.pb.h文件。当我尝试运行“make”时,编译test.pb.cc时失败,并显示以下错误消息: In file included from /Users/ethan/Documents/Development/project/components/component/test/test/test.cpp:2:0: /Users/ethan/Documents/Development/project/components/component/test/test/test.pb.h:10:40: fatal error: google/protobuf/port_def.inc: No such file or directory,protocol-buffers,esp32,esp-idf,Protocol Buffers,Esp32,Esp Idf,我猜这是我的component.mk文件的问题?我不知道如何在component.mk中链接Protobuf库。我在自己编写的一个快速命令行程序中实现了这一点,并且在LDFLAGS中使用了-L~/usr/local/lib,在g++命令中使用了-lprotobuf。有什么想法吗 我也在esp32.com上问了这个问题,试图吸引更多的观众,因为我真的很快就要让这个工作开始了。提前感谢您的帮助 EDIT(4/30/19):这并没有完全解决问题,因为我无法完全编译我的代码,但它确实修复了include

我猜这是我的component.mk文件的问题?我不知道如何在component.mk中链接Protobuf库。我在自己编写的一个快速命令行程序中实现了这一点,并且在LDFLAGS中使用了-L~/usr/local/lib,在g++命令中使用了-lprotobuf。有什么想法吗

我也在esp32.com上问了这个问题,试图吸引更多的观众,因为我真的很快就要让这个工作开始了。提前感谢您的帮助

EDIT(4/30/19):这并没有完全解决问题,因为我无法完全编译我的代码,但它确实修复了include错误,所以可能我的思路有些正确。任何帮助都将不胜感激!我现在得到了链接错误,错误是“protobuf函数名未定义…”。现在可能有数百行这样的错误

看来我现在已经开始工作了。在我的project/main目录中,我在component.mk文件中添加了以下行:

CXXFLAGS += -lpthread -DGOOGLE_PROTOBUF_NO_RTTI -I/usr/local/include
我已经将Protobuf(使用默认设置和说明)安装到/usr/local

  • Protobufs需要pthread库,因此需要-lpthread标志
  • 上的Make失败,错误为“无法将typeid与-fno rtti一起使用”,该错误已通过添加-DGOOGLE_PROTOBUF_NO_rtti修复
  • -I/usr/local/include
    将usr/local/include(Protobuf安装的位置)添加到编译器搜索的路径列表中
我的项目结构如下:

-project
    -main
        -pb
            myfile.proto
            myfile.pb.cc
            myfile.pb.h
            myfile_c_interface.h
            myfile_c_interface.cpp
        -main.c
        -component.mk (this is the one I added the above line to)
    -Makefile
    -partitions.csv
    ...
我使用以下命令编译了myfile.proto,就像使用protoc编译普通文件一样:

cd main/pb
protoc --cpp_out=. myfile.proto
生成myfile.pb.cc和myfile.pb.h


与Meal.c接口,我编写了MyFreIcCyPosial.h和MyFieleC.IdFACTH.CPP,使用MyFr.Pro的原始Bufff消息,使用C类,但通过C C++仅将C++的功能暴露给主(只与内部类交互的公共函数)。也许不是最简单的方法,但它是有效的

您不能将ESP32应用程序链接到为您的构建体系结构编译的库(除非您是在ESP32计算机上编译的,这是不太可能的)。您还必须为ESP32编译protobuf库。您不应该在ESP32程序中使用/usr/local/{include,lib}中的任何内容

您需要将protobuf构建系统构建到ESP IDF系统[*]中。您将有protobuf库文件要交叉编译,生成的myfile.pb.cc文件要交叉编译


*当前位置我还没有做这个,所以这是留给读者的练习

你用过这个吗?我和你有同样的问题,不幸的是我没有