您的位置:首页 > Web前端

gcc-3.4编译google protocol buffer 2.4.0a

2011-04-07 18:10 351 查看
gcc 3.4是比较老的编译器,用它来编译最新版protobuf 2.4.0a的话,可能会有如下错误:

google/protobuf/descriptor.cc: In member function `virtual const google::protobuf::FieldDescriptor* google::protobuf::DescriptorBuilder::OptionInterpreter::AggregateOptionFinder::FindExtension(google::protobuf::Message*, const std::string&) const':

./google/protobuf/descriptor.h:1152: error: `google::protobuf::internal::Mutex*google::protobuf::DescriptorPool::mutex_' is private

google/protobuf/descriptor.cc:4341: error: within this context

./google/protobuf/descriptor.h:1152: error: `google::protobuf::internal::Mutex*google::protobuf::DescriptorPool::mutex_' is private

google/protobuf/descriptor.cc:4342: error: within this context

make[2]: *** [descriptor.lo] Error 1

make[2]: Leaving directory `/home/liangry/download/protobuf-2.4.0a/src'

make[1]: *** [all-recursive] Error 1

make[1]: Leaving directory `/home/liangry/download/protobuf-2.4.0a'

make: *** [all] Error 2

需打上以下补丁:

--- ./src/google/protobuf/descriptor.cc 2011-02-02 22:08:47.000000000 +0800
+++ ./src/google/protobuf/descriptor.cc 2011-04-07 10:35:29.000000000 +0800
@@ -2160,6 +2160,11 @@
static inline bool get_is_placeholder(const Descriptor* descriptor) {
return descriptor->is_placeholder_;
}
+  static inline void assert_mutex_held(const DescriptorPool* pool) {
+    if (pool->mutex_ != NULL) {
+      pool->mutex_->AssertHeld();
+    }
+  }
// Must be run only after options have been interpreted.
//
@@ -4338,9 +4343,12 @@
virtual const FieldDescriptor* FindExtension(
Message* message, const string& name) const {
+    /*
if (builder_->pool_->mutex_ != NULL) {
builder_->pool_->mutex_->AssertHeld();
}
+    */
+    assert_mutex_held(builder_->pool_);
Symbol result = builder_->LookupSymbolNoPlaceholder(
name, message->GetDescriptor()->full_name());
if (result.type == Symbol::FIELD &&


在protobuf-2.4.0a编译目录下,把上述内容保存为protobuf_gcc3.4.patch,然后输入以下命令即可。

$ patch -p0 < protobuf_gcc3.4.patch

patching file ./src/google/protobuf/descriptor.cc

参考文章:http://code.google.com/p/protobuf/source/detail?r=380#
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: