海湾合作委员会的Protobuf编译问题

gcc's protobuf compilation issue

本文关键字:Protobuf 编译 问题 委员会      更新时间:2023-10-16

我正在使用gcc。

运行ubuntu 16.04

我的q.ccp文件是

#include <my_messages.pb.h>
int main(int argc, char **argv)
{
    google::protobuf::MyMessage* logged_msg_;
    return 0;
}

用于编译的命令:

g++ -m64 -Wl,-O1 -L/usr/lib/x86_64-linux-gnu /usr/local/lib/libprotobuf.a my_messages.pb.cc q.cpp -lpthread

protoc --version返回: 2.2.0

gcc- version

gcc (Ubuntu 4.8.5-4ubuntu2) 4.8.5
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

编译错误以

开头
undefined reference to `google::protobuf::internal::ExtensionSet::Clear()

并给出协议缓冲区的每个函数的未定义参考错误。

对GCC的参数顺序很重要(库应追随对象文件和源文件)。您可能想要

g++ -Wall -m64 -O1 -g -L/usr/lib/x86_64-linux-gnu -L/usr/local/lib/ 
     my_messages.pb.cc q.cpp -lprotobuf -lpthread

(我相信-Wl,-O1是错误的,没有用,但是我离开您去检查)

花一些时间阅读文档的GCC命令选项章节。您可能需要(暂时)使用g++ -v而不是上述命令中的g++来了解正在发生的事情。

您可能应该将GNU Make用于构建。有关灵感,请参见Makefile的示例。花一些时间阅读make的文档。