我有一个cpp文件,我试图使用我使用协议缓冲区创建的消息。但是我继续得到那个着名的"未定义的参考"错误如下:
undefined reference to PointMsg::PointMsg()
undefined reference to PointMsg::~PointMsg()
undefined reference to PointMsg::~PointMsg()
这是我的原型文件, Point.proto :
message PointMsg {
required float x = 1;
required float y = 2;
optional float z = 3;
optional string name = 4 [default=""];
required string sender = 5;
}
执行proto命令生成包含必要功能的附加文件后,我尝试在我的组件中使用它们,这是另一个文件。我将包含为#include "proto/Point.pb.h"
,我按如下方式使用:
PointMsg pointmsg;
detectObstacle(&pointmsg);
在功能中会发生什么:
void detectObstacle(PointMsg* pointmsg)
{
// initialize random seed
srand (time(NULL));
// generate two numbers
int x = rand() % 800 + 1;
int y = rand() % 800 + 1;
// assign the values to fields
pointmsg->set_x(x);
pointmsg->set_y(y);
cout<<pointmsg->x()<<endl;
cout<<pointmsg->y()<<endl;
string sender = "obstacle_detection";
cout<<sender<<endl;
pointmsg->set_sender(sender);
cout<<pointmsg->sender()<<endl;
return;
}
以下是用于构建和链接的命令:
g++ -I $APR_INCLUDE -I $CMS_HOME/src/main -g -o obstacle_detection.o -c obstacle_detection.cpp
g++ -L $CMS_HOME/src/main/.libs/ -g -o obstacle_detection obstacle_detection.o -lactivemq-cpp -lssl -lprotobuf -pthread
我得到了未定义引用的错误。我已经花了很多时间在这上面,无法找到任何解决方案。人们一直说我必须在最后添加图书馆,这对我来说不是解决方案。
感谢任何帮助。
答案 0 :(得分:0)
您需要运行proto编译器来生成特定于protobuf模式的C ++代码(您似乎已经完成了),然后编译并链接 代码!某处应该有Point.pb.o
文件。
没有一个固定的库可以为所有未来的消息类型提供代码。公共库仅包含与类型无关的核心操作的公共代码(例如,字段描述符,序列化,重复字段)。但是为您的消息类型提供实际C ++接口的叶代码将成为您必须自己链接的 代码的一部分。