使用 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 上编译的主要内容,如果未能解决你的问题,请参考以下文章
使用base64解决protobuf数据在http上传输的问题 | 第5期
带有 MsBuild 的 SonarQube:sonar.cs.analyzer.projectOutPaths 不会为此项目加载任何 protobuf 文件
使用 DataContract 属性时 ProtoBuf.NET 未序列化