我正在尝试在我的IDF项目中使用一些C ++ protobuffer文件,但是在使其工作时遇到了一些问题。我已经在test.proto文件上使用protoc生成了test.pb.cc和test.pb.h文件。当我尝试运行“ make”时,在编译test.pb.cc时失败,并显示以下错误消息:
let text = "The date is 12 foobar, 2019."
我猜这是我的component.mk文件的问题吗?我不确定如何在component.mk中链接Protobuf库。我在编写的快速命令行程序中使用了该文件,在LDFLAGS中使用了-L〜/ usr / local / lib并在g ++命令中使用了-lprotobuf来创建该文件。有什么想法吗?
我也曾在esp32.com上问过这个问题,试图扩大受众范围,因为我真的必须尽快使它生效。预先感谢您的帮助!
答案 0 :(得分:0)
EDIT(4/30/19):由于我无法完全编译我的代码,但这并没有完全解决问题,但是确实解决了包含错误,所以也许我在正确的轨道。任何帮助仍然表示赞赏!我现在收到错误为“ function_from_protobuf_name未定义...”的链接错误。现在可能会收到数百行这些错误。
看来我已经开始工作了。在我的项目/主目录中,将以下行添加到我的component.mk文件中:
CXXFLAGS += -lpthread -DGOOGLE_PROTOBUF_NO_RTTI -I/usr/local/include
我已将Protobuf(使用默认设置和说明here)安装到/ usr / local。
-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
...
我使用以下命令使用protoc正常编译myfile.proto:
cd main/pb
protoc --cpp_out=. myfile.proto
产生myfile.pb.cc和myfile.pb.h
为了与main.c进行接口,我编写了myfile_c_interface.h和myfile_c_interface.cpp,它们使用其c类根据需要使用来自myfile.proto的Protobuf消息,但通过仅具有c功能的c ++向main公开了功能(只是在内部与类交互的公共函数)。也许不是最简单的方法,但是它正在工作!
答案 1 :(得分:0)
您不能将ESP32应用程序链接到针对您的构建体系结构编译的库(除非您在ESP32机器上进行编译,这极不可能)。您还必须为ESP32编译protobuf库。您不应在ESP32程序中使用/ usr / local / {include,lib}中的任何内容。
您需要将protobuf构建系统构建为ESP IDF系统[*]。您将需要protobuf库文件进行交叉编译,并将生成的myfile.pb.cc文件进行交叉编译。
*:我还没有这样做,所以这是留给读者的练习。