gpt4 book ai didi

c++ - 在 C++ 中使用 Protobuf 3.2 有困难

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:42:53 28 4
gpt4 key购买 nike

我正在尝试在 C++ 中使用 Protobuf,但无法让它执行任何有意义的操作。我正在使用 Visual Studio 2015。

我构建了 protobuf library .我使用的是 github 上的最新版本。

我已经创建了一个 .proto 文件:

syntax = "proto3";
package Networking;

message Robot{

message KinematicLinkProto {
string name = 1;
float x_pos = 2;
float y_pos = 3;
float z_pos = 4;
float roll = 5;
float pitch = 6;
float yaw = 7;
float x_scale = 8;
float y_scale = 9;
float z_scale = 10;
}

repeated KinematicLinkProto links = 1;

}

我编译它,并尝试将它添加到一个项目中:

#include "Robot.pb.h"



int main(int argc, char **argv)
{

Networking::Robot robot_message;

return 0;

}

我的链接器链接 libprotobuf.lib。我将其构建为/MD,将 libprotobuf 构建为/MD。

由于某种原因,这个简单的程序有以下两个链接器错误:

Error   LNK2019 unresolved external symbol "private: static bool google::protobuf::io::CodedOutputStream::default_serialization_deterministic_" (?default_serialization_deterministic_@CodedOutputStream@io@protobuf@google@@0_NA) referenced in function "public: virtual unsigned char * __cdecl Networking::Robot::SerializeWithCachedSizesToArray(unsigned char *)const " (?SerializeWithCachedSizesToArray@Robot@Networking@@UEBAPEAEPEAE@Z)   


Error LNK2019 unresolved external symbol "class google::protobuf::internal::ExplicitlyConstructed<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > google::protobuf::internal::fixed_address_empty_string" (?fixed_address_empty_string@internal@protobuf@google@@3V?$ExplicitlyConstructed@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@123@A) referenced in function "protected: void __cdecl google::protobuf::internal::RepeatedPtrFieldBase::Clear<class google::protobuf::RepeatedPtrField<class Networking::Robot_KinematicLinkProto>::TypeHandler>(void)" (??$Clear@VTypeHandler@?$RepeatedPtrField@VRobot_KinematicLinkProto@Networking@@@protobuf@google@@@RepeatedPtrFieldBase@internal@protobuf@google@@IEAAXXZ)

我很困惑——这是一个非常简单的程序。我可能做错了什么?

编辑:一位同事编译了 proto 3001000。这个版本似乎确实有效。我很好奇 3002000 会破坏一切。

最佳答案

如果您正在使用 DLL,请使用

#define PROTOBUF_USE_DLLS

关于c++ - 在 C++ 中使用 Protobuf 3.2 有困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42797247/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com