使用 g++-5 时,protobuf 不会在 osx 上编译

Posted

技术标签:

【中文标题】使用 g++-5 时,protobuf 不会在 osx 上编译【英文标题】:protobuf will not compile on osx when using g++-5 【发布时间】:2016-03-02 21:08:33 【问题描述】:

请参阅以下基于protobuf 上的c++ tutorial 的示例项目。

https://github.com/cskeeters/protobuf_addressbook

我在 osx 10.10.5 上安装了 protobuf,使用:

brew install protobuf

我也通过 brew install 安装了 g++-5,但已经有一段时间了。为什么这不能用 g++ 编译?

失败的命令是:

g++-5 -g -O2 -L/usr/local/Cellar/protobuf/2.6.1/lib -lprotobuf -D_THREAD_SAFE -o main main.o addressbook.pb.o

结果是: Undefined symbols for architecture x86_64: "google::protobuf::MessageFactory::InternalRegisterGeneratedFile(char const*, void (*)(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&))", referenced from: tutorial::protobuf_AddDesc_addressbook_2eproto() in addressbook.pb.o ...

我只是在测试。我没有理由不在 osx 上使用 clang++。我只是好奇。

【问题讨论】:

【参考方案1】:

这是因为 clang、g++-5 和 g++-4.x 的 ABI 不同。您需要首先使用 g++-5 重新编译 protobuf 本身,然后才使用 -lprotobuf 将其链接到您的程序。

【讨论】:

我已经验证了使用g++-5编译protobuf时可以使用g++-5。我必须设置 DYLD_LIBRARY_PATH 以获取生成的二进制文件以使用非 brew 库。

以上是关于使用 g++-5 时,protobuf 不会在 osx 上编译的主要内容,如果未能解决你的问题,请参考以下文章

经验分享ubuntu 安装 protobuf

使用base64解决protobuf数据在http上传输的问题 | 第5期

带有 MsBuild 的 SonarQube:sonar.cs.analyzer.projectOutPaths 不会为此项目加载任何 protobuf 文件

使用 DataContract 属性时 ProtoBuf.NET 未序列化

为啥 ProtoBuf 在第一次调用时这么慢,但在循环内部却非常快?

ProtoBuf-Net ProtoInclude 泛型类型子类