尝试编译调用小型protobuf类(其本身已成功编译)的代码时,出现链接器错误:

undefined reference to `ggf::Block::Leveling()'
undefined reference to `ggf::Block::~Leveling()'

导致此错误的代码行:
ggf::Block blockMessage;

原虫:
package ggf;
message Leveling {
        required int32 type         = 1;
        optional uint64 blockNumber = 2;
        optional bytes blockData    = 3;
}

最后,我的构建行,pkg-config中的config标志:
g++ -o send sendercode.cpp -std=c++11 -lprotobuf -pthread -lpthread -g

另外,我可以创建一个指向此Block类的指针,该类可以成功编译,但是在设置类型时会出现段错误,
ggf::Block *blockRequest;
blockRequest->set_type(10);   //SIGSEGV

调试显示以下内容:
Program received signal SIGSEGV, Segmentation fault.
0x0000000000400d66 in ggf::Block::set_has_type (this=0x0) at block.pb.h:172

好像未初始化一样。.我错过了初始化步骤吗?

最佳答案

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

g++ -o send sendercode.cpp block.pb.cc -std=c++11 -lprotobuf -pthread -g

关于C++ Protobuf对构造函数/析构函数的 undefined reference ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39261897/

10-13 08:30
查看更多