gcc的protobuf编译问题

时间:2016-12-22 07:28:40

标签: c++ compiler-errors linker protocol-buffers

我用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()

并为协议缓冲区的每个函数提供未定义的引用错误。

1 个答案:

答案 0 :(得分:3)

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 command options chapter。您可能希望(暂时)在上面的命令中使用g++ -v而不是g++来了解发生了什么。

您可能应该使用GNU make进行构建。请参阅Makefile的{​​{3}}获取灵感。花一些时间阅读make的{​​{3}}。