protobuf支持vs2019_protobuf遇坑总结

标签:

在一个vs2013解决方案下创建了三个工程文件,在其中一个工程(Foundation)中放有CtrlMessage.pb.h和ControlMessageTags的头文件。编译后出错总共68处。

错误 2 error LNK2019: 无法解析的外部符号 "void __cdecl google::protobuf::internal::VerifyVersion(int,int,char const *)" (?VerifyVersion@internal@protobuf@google@@YAXHHPBD@Z),该符号在函数 "void __cdecl CtrlMsg::protobuf_AddDesc_CtrlMessage_2eproto(void)" (?protobuf_AddDesc_CtrlMessage_2eproto@CtrlMsg@@YAXXZ) 中被引用 F:\StartServer2013\StartServer\Foundation.lib(CtrlMessage.pb.obj) ControlCenter

错误 61 error LNK2001: 无法解析的外部符号 "class std::basic_string,class std::allocator > const google::protobuf::internal::kEmptyString" (?kEmptyString@internal@protobuf@google@@3V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@B) F:\StartServer2013\StartServer\Foundation.lib(CtrlMessage.pb.obj) ControlCenter

打开Foundation工程属性页,在“附加依赖项”增加protobuf库文件libprotobuf.lib,然后把以前用VS2010编译库文件复制Founddation同级目录下,Foundation工程编译通过。

然后在另一个引用Foundtion工程中,编译出错总共38处

错误 8 error LNK2038: 检测到“_MSC_VER”的不匹配项: 值“1600”不匹配值“1800”(StartServerDlg.obj 中) F:\StartServer2013\StartServer\Foundation.lib(common.obj) ControlCenter

错误 35 error LNK2038: 检测到“_MSC_VER”的不匹配项: 值“1600”不匹配值“1800”(StartServerDlg.obj 中) F:\StartServer2013\StartServer\Foundation.lib(stringprintf.obj) ControlCenter

然后ControlCenter项目的平台工具集改成vs2010,错误只有5个,

错误 1 error LNK2038: mismatch detected for ‘_MSC_VER‘: value ‘1800‘ doesn‘t match value ‘1600‘ in StartServerDlg.obj F:\StartServer2013\StartServer\Foundation.lib(CtrlMessage.pb.obj) ControlCenter

错误 3 error LNK2019: unresolved external symbol "__declspec(dllimport) void __cdecl std::_Xbad_alloc(void)" (__imp_?_Xbad_alloc@std@@YAXXZ) referenced in function "char * __cdecl std::_Allocate(unsigned int,char *)" (??$_Allocate@D@std@@YAPADIPAD@Z) F:\StartServer2013\StartServer\Foundation.lib(CtrlMessage.pb.obj) ControlCenter

于是想到可能是由于protobuf的库文件是VS2010编译的。于是用VS2013重新打开PROTOBUF源文件重新编译2013版的protobuf,将编好的libprotobuf.lib文件复制到FOUNDATION工程目录下,依次编译foundation工程和ControlCenter工程,编译成功。总结VS2010和VS2013编译出的PROTOBUF的LIB文件不能交叉引用。

标签:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个错误信息表示找不到protobuf(Protocol Buffers)库,具体缺失的部分有protobuf_libraries和protobuf_include_dir。 解决这个问题的方法如下: 1. 确认是否已经安装了protobuf库。可以通过在命令行运行"pip list"或"conda list"查看已安装的库。如果未安装,可以使用包管理工具如pip或conda进行安装(例如,"pip install protobuf")。 2. 如果已经安装了protobuf库,但仍然报错,可能是由于缺少protobuf_libraries和protobuf_include_dir变量的路径。可以在系统的环境变量中设置这两个变量。protobuf_libraries变量应指向protobuf库的二进制文件路径,而protobuf_include_dir变量应指向protobuf库的头文件路径。 3. 如果已经设置了这两个变量,但仍然出现错误,那么可能是因为这些路径设置不正确或者protobuf库的安装位置与预期不符。可以通过重新安装protobuf库,并确保设置路径正确来解决问题。 4. 如果仍然无法解决问题,可以尝试手动下载并安装protobuf库。在protobuf的官方GitHub页面上可以找到最新的发布版本,并提供了安装步骤。按照步骤下载并安装protobuf库,然后再次检查路径设置是否正确。 总之,缺少protobufprotobuf_libraries和protobuf_include_dir)错误通常表示系统无法找到protobuf库。通过确认库是否已安装、设置正确的路径和重新安装protobuf库等方法,可以解决这个问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值