在使用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