C++ Protobuf对构造函数/析构函数的未定义引用

Rub*_*uck 3 c++ protocol-buffers

当试图编译调用一个小的protobuf类(它本身成功编译)的代码时,我得到一个链接器错误:

undefined reference to `ggf::Block::Leveling()'
undefined reference to `ggf::Block::~Leveling()'
Run Code Online (Sandbox Code Playgroud)

导致此错误的代码行:

ggf::Block blockMessage;
Run Code Online (Sandbox Code Playgroud)

protobuf:

package ggf;
message Leveling {
        required int32 type         = 1;
        optional uint64 blockNumber = 2;
        optional bytes blockData    = 3;
}
Run Code Online (Sandbox Code Playgroud)

最后,我的构建行,来自pkg-config的配置标志:

g++ -o send sendercode.cpp -std=c++11 -lprotobuf -pthread -lpthread -g
Run Code Online (Sandbox Code Playgroud)

或者,我可以创建一个指向此Block类的指针,该类成功编译但在设置类型时会出现段错误,

ggf::Block *blockRequest;
blockRequest->set_type(10);   //SIGSEGV
Run Code Online (Sandbox Code Playgroud)

调试显示以下内容:

Program received signal SIGSEGV, Segmentation fault.
0x0000000000400d66 in ggf::Block::set_has_type (this=0x0) at block.pb.h:172
Run Code Online (Sandbox Code Playgroud)

它表现得好像没有初始化..我错过了初始化步骤吗?

for*_*ack 6

您还应该添加block.pb.cc到编译文件列表:

g++ -o send sendercode.cpp block.pb.cc -std=c++11 -lprotobuf -pthread -g
Run Code Online (Sandbox Code Playgroud)