以下统一在Downloads目录执行:
1、打开终端
$wget https://github.com/google/protobuf/releases/download/v3.6.1/protobuf-all-3.6.1.tar.gz $tar zxvf protobuf-all-3.6.1.tar.gz
2、autogen.sh需要gtest包,但需要翻墙才能使用,翻不了就用这个:
$cd protobuf-2.6.1 $vim autogen.sh
把这个:
echo “Google Test not present. Fetching gtest-1.5.0 from the web…” curl http://googletest.googlecode.com/files/gtest-1.5.0.tar.bz2 | tar jx mv gtest-1.5.0 gtest
修改为:
wget https://github.com/google/googletest/archive/release-1.5.0.tar.gz tar xzvf release-1.5.0.tar.gz mv googletest-release-1.5.0 gtest
3、protobuf默认安装在 /usr/local 目录
$ ./configure $ make #编译,时间有点长 $ make check $ sudo make install
4、检查
$protoc —version
报错protoc: error while loading shared libraries: libprotoc.so.8: cannot open shared
执行:
$sudo ldconfig
5、安装插件
进入网址www.github.com/golang/protobuf,下载所有code,解压到当前文件夹,
里面会有个…master文件夹,把里面的master重命名为protobuf,
并剪切到$GOPATH/src/github.com/golang下
6、编译
$cd $GOPATH/src/github.com/golang/protobuf/protoc-gen-go $go build $sudo cp protoc-gen-go /bin/
如果protoc-gen-go能tab自动补齐说明成功。
测试(必看):
syntax = “proto3”;
enum School{ S1 = 0; }
message People{
string name = 1;
int32 age = 2;
}
message Student{
int32 weight = 1;
}
service hello{
rpc SayHello (People) returns (Student);
}
编译:
$protoc —go_out=plugins=grpc:./ *.proto
若报错如下,是因为在 proto3 的语法中缺少了 option go_package(有可能)
protoc-gen-go: invalid Go import path “.” for “myproto.proto”
The import path must contain at least one forward slash (‘/‘) character.
See https://developers.google.com/protocol-buffers/docs/reference/go-generated#package for more information.
—go_out: protoc-gen-go: Plugin failed with status code 1.
需要在syntax添加option信息,
option go_package = “path;name”; //path 表示生成的go文件的存放地址,会自动生成目录的。 //name 表示生成的go文件所属的包名
如: syntax = “proto3”; option go_package = “./;pb”; //不加这一句就是会报错
参考:https://blog.csdn.net/xiexievv/article/details/47396725
https://blog.csdn.net/u014774853/article/details/109059783
https://blog.csdn.net/weixin_37989267/article/details/111724645