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

标签 c++ protocol-buffers

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

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

导致此错误的代码行:

ggf::Block blockMessage;

Protocol Buffer :

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

最后,我的构建行,来自 pkg-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 未定义对构造函数/析构函数的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39261897/

相关文章:

c++ - 在 C/C++ 中,是否保证 volatile 变量在线程之间具有最终一致的语义?

integer - 为什么 varint 是一种有效的数据表示?

Golang if 语句没有看到 0 for int32

c++ - 嵌套结构,从一个空行分隔的文件中读取数据

c++ - 什么是声明和声明符?标准如何解释它们的类型?

tensorflow - tensorflow 中.pb和.pbtxt之间的区别?

c++ - CMake:隐藏 -WShadow 子目标的全局编译标志

Python protobuf gRPC 生成一个不存在的依赖

C++ 运算符 [] 魔法

C++ 在模板编译器错误中使用模板