记录一次protobuf的坑(google/protobuf/XXXXX.proto: File not found.)

在使用protoc进行编译的时候,报错google/protobuf/empty.proto: File not found.

问题原因:

由于某些原因,在安装过protobuf之后,将protobuf的头文件目录、lib目录移动到了规定的地方。
这个protobuf在进行编译的时候,如果不指定–proto_path的话,就会去protoc的安装目录以及工程目录下去寻找头文件。

#protoc的安装目录
/usr/local/usr/bin
#protoc的头文件目录
/usr/local/usr/include
#protoc的lib文件目录
/usr/local/usr/lib

#由于项目中的某些规定,将上记的头文件目录移动了,导致protoc无法找到头文件

在protoc的安装目录弄一个软链接,问题解决。

# /XXX/XXX/XXX是移动后的protobuf头文件目录
sudo ln -s /XXX/XXX/XXX/google /usr/local/usr/include/google

当然也可以在编译时通过–proto_path来指定头文件目录,但是因为项目整体采用cmake方式。。。

顺便分享一下使用的protoc编译命令

#--proto_path=. 是为了让protoc能找到编译目标(testapp.proto)
protoc --proto_path=. --go_out=. ./testapp.proto

# 如果要指定头文件位置(可以重复使用proto_path来指定多个头文件目录)
protoc --proto_path=*头文件目录* --proto_path=. --go_out=. ./testapp.proto

结束

上一篇:windows golang安装Grpc


下一篇:如何在C#中使用Google.Protobuf工具