protobuf编译
Protocol Buffers是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化
https://github.com/protocolbuffers/protobuf.git
编译
# apt-get install autoconf automake libtool curl
# autoconf
# ./configure --prefix=/home/protobuf/install
# make
# make install
出现如下错误:
configure.ac:17: error: possibly undefined macro: AM_MAINTAINER_MODE
解决办法:
//执行aclocal命令
# aclocal
//再次执行autoconf命令
出现如下错误:
configure: error: cannot find install-sh, install.sh, or shtool in "." "./.." "./../.."
解决办法:
//执行autoreconf命令
# autoreconf -vif
编译完成:
# tree install
install
├── bin
│ └── protoc
├── include
│ └── google
│ └── protobuf
│ ├── any.h
│ ├── any.pb.h
│ ├── any.proto
│ ├── api.pb.h
│ ├── api.proto
│ ├── arena.h
│ ├── arenastring.h
│ ├── compiler
│ │ ├── code_generator.h
│ │ ├── command_line_interface.h
│ │ ├── cpp
│ │ │ └── cpp_generator.h
│ │ ├── csharp
│ │ │ ├── csharp_generator.h
│ │ │ └── csharp_names.h
│ │ ├── importer.h
│ │ ├── java
│ │ │ ├── java_generator.h
│ │ │ └── java_names.h
│ │ ├── javanano
│ │ │ └── javanano_generator.h
│ │ ├── js
│ │ │ └── js_generator.h
│ │ ├── objectivec
│ │ │ ├── objectivec_generator.h
│ │ │ └── objectivec_helpers.h
│ │ ├── parser.h
│ │ ├── plugin.h
│ │ ├── plugin.pb.h
│ │ ├── plugin.proto
│ │ ├── python
│ │ │ └── python_generator.h
│ │ └── ruby
│ │ └── ruby_generator.h
│ ├── descriptor_database.h
│ ├── descriptor.h
│ ├── descriptor.pb.h
│ ├── descriptor.proto
│ ├── duration.pb.h
│ ├── duration.proto
│ ├── dynamic_message.h
│ ├── empty.pb.h
│ ├── empty.proto
│ ├── extension_set.h
│ ├── field_mask.pb.h
│ ├── field_mask.proto
│ ├── generated_enum_reflection.h
│ ├── generated_enum_util.h
│ ├── generated_message_reflection.h
│ ├── generated_message_util.h
│ ├── io
│ │ ├── coded_stream.h
│ │ ├── printer.h
│ │ ├── strtod.h
│ │ ├── tokenizer.h
│ │ ├── zero_copy_stream.h
│ │ ├── zero_copy_stream_impl.h
│ │ └── zero_copy_stream_impl_lite.h
│ ├── map_entry.h
│ ├── map_entry_lite.h
│ ├── map_field.h
│ ├── map_field_inl.h
│ ├── map_field_lite.h
│ ├── map.h
│ ├── map_type_handler.h
│ ├── message.h
│ ├── message_lite.h
│ ├── metadata.h
│ ├── reflection.h
│ ├── reflection_ops.h
│ ├── repeated_field.h
│ ├── repeated_field_reflection.h
│ ├── service.h
│ ├── source_context.pb.h
│ ├── source_context.proto
│ ├── struct.pb.h
│ ├── struct.proto
│ ├── stubs
│ │ ├── atomicops.h
│ │ ├── atomicops_internals_arm64_gcc.h
│ │ ├── atomicops_internals_arm_gcc.h
│ │ ├── atomicops_internals_arm_qnx.h
│ │ ├── atomicops_internals_atomicword_compat.h
│ │ ├── atomicops_internals_generic_gcc.h
│ │ ├── atomicops_internals_macosx.h
│ │ ├── atomicops_internals_mips_gcc.h
│ │ ├── atomicops_internals_pnacl.h
│ │ ├── atomicops_internals_power.h
│ │ ├── atomicops_internals_solaris.h
│ │ ├── atomicops_internals_tsan.h
│ │ ├── atomicops_internals_x86_gcc.h
│ │ ├── atomicops_internals_x86_msvc.h
│ │ ├── atomic_sequence_num.h
│ │ ├── bytestream.h
│ │ ├── callback.h
│ │ ├── casts.h
│ │ ├── common.h
│ │ ├── fastmem.h
│ │ ├── hash.h
│ │ ├── logging.h
│ │ ├── macros.h
│ │ ├── mutex.h
│ │ ├── once.h
│ │ ├── platform_macros.h
│ │ ├── port.h
│ │ ├── scoped_ptr.h
│ │ ├── shared_ptr.h
│ │ ├── singleton.h
│ │ ├── status.h
│ │ ├── stl_util.h
│ │ ├── stringpiece.h
│ │ ├── template_util.h
│ │ └── type_traits.h
│ ├── text_format.h
│ ├── timestamp.pb.h
│ ├── timestamp.proto
│ ├── type.pb.h
│ ├── type.proto
│ ├── unknown_field_set.h
│ ├── util
│ │ ├── field_comparator.h
│ │ ├── field_mask_util.h
│ │ ├── json_util.h
│ │ ├── message_differencer.h
│ │ ├── time_util.h
│ │ ├── type_resolver.h
│ │ └── type_resolver_util.h
│ ├── wire_format.h
│ ├── wire_format_lite.h
│ ├── wire_format_lite_inl.h
│ ├── wrappers.pb.h
│ └── wrappers.proto
└── lib
├── libprotobuf.a
├── libprotobuf.la
├── libprotobuf-lite.a
├── libprotobuf-lite.la
├── libprotobuf-lite.so
├── libprotobuf-lite.so.10
├── libprotobuf-lite.so.10.0.0
├── libprotobuf.so
├── libprotobuf.so.10
├── libprotobuf.so.10.0.0
├── libprotoc.a
├── libprotoc.la
├── libprotoc.so
├── libprotoc.so.10
├── libprotoc.so.10.0.0
└── pkgconfig
├── protobuf-lite.pc
└── protobuf.pc