编译的Google协议缓冲区不起作用(C ++)

时间:2018-07-12 11:11:54

标签: c++ protocol-buffers

我下载了Google协议缓冲区3.6.0和适用于3.6.0的正确的protoc.exe。

我的protoc.exe与.proto文件位于同一目录中,并且已经运行:

protoc -I=. --cpp_out=. ./xxxxxxx.proto

我得到了.h和.cc文件,但是当我尝试编译运行它们的程序时,却出现了如下错误:

  

google / protobuf / stubs / mutex.h(81):错误C2614:   'google :: protobuf :: internal :: MutexLockMaybe':非法成员   初始化:“ mu_”不是基础或成员

(我正在使用VS2012)

任何想法

2 个答案:

答案 0 :(得分:4)

来自Protocol Buffers 3.6.0

  

从此版本开始,我们现在需要C ++ 11。对于那些我们不能   尚未升级到C ++ 11,我们将尝试保持3.5.x分支更新   仅修复了严重的错误。

this table可以看出,VS 2012具有许多未实现的C ++ 11功能。

因此,您可以选择:使用较旧的Google协议缓冲区3.5或使用最新的Visual Studio。如果可以的话,还是gcc。

答案 1 :(得分:2)

对于protobuf,应使用较旧的编译器。 2.6.1还可以,我用它。或切换到VS 2015/2017并在那里进行开发。我建议使用VS 2017 for C ++ 11。