ProtocolBuffer for Objective-C 运行环境配置(真正测试过的)

1、下载ProtocolBuffer包(2.5版本与下面的object-c插件不兼容,建议下载2.4.1版本的):

http://code.google.com/intl/zh-CN/apis/protocolbuffers/

编译安装(生成的编译器protoc在/usr/local/bin目录下):

cd protobuf-2.4.1

           ./configure
           make
           make install

2、下载Objective-C compiler for ProtocolBuffer(目前有两种类型的实现)。

(1)、针对ProtocolBuffer2.2做修改,使最后生成的.proto文件编译器(protoc)支持Objective-C类型的文件输出。

http://code.google.com/p/metasyntactic/wiki/ProtocolBuffers

(2)、针对ProtocolBuffer2.3推出的plugin模式编写插件,以插件方式支持Objective-C类型的文件输出。

https://github.com/booyah/protobuf-objc

我选用第(1)种方式,这也是Google推荐的方式。

 http://code.google.com/p/metasyntactic/wiki/ProtocolBuffers,下载源码压缩包后解压到相关目录

进入该目录,并执行:

cd  ProtocolBuffers-2.2.0-Source

                       ./configure
                       make
                       make install

没有这么顺利

google/protobuf/message.cc:130:60: error: implicit instantiation of undefined
      template ‘std::__1::basic_istream<char, std::__1::char_traits<char> >‘
  return ParseFromZeroCopyStream(&zero_copy_input) && input->eof();
                                                           ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/iosfwd:109:33: note: 
      template is declared here
    class _LIBCPP_TYPE_VIS_ONLY basic_istream;
                                ^
google/protobuf/message.cc:135:67: error: implicit instantiation of undefined
      template ‘std::__1::basic_istream<char, std::__1::char_traits<char> >‘
  return ParsePartialFromZeroCopyStream(&zero_copy_input) && input->eof();
                                                                  ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/iosfwd:109:33: note: 
      template is declared here
    class _LIBCPP_TYPE_VIS_ONLY basic_istream;
                                ^
2 warnings and 2 errors generated.
make[2]: *** [message.lo] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2

  • 解决方法如下:

找到文件src/google/protobuf/message.cc     在文件的第一个#include之上的一行,加入

#include <istream>

继续运行make ,即成功通过。

3、测试.proto文件编译

写一个person.proto文件:

[cpp] view plaincopy

  1. message Person {
  2. required string name = 1;
  3. required int32 id = 2;
  4. optional string email = 3;
  5. enum PhoneType {
  6. MOBILE = 0;
  7. HOME = 1;
  8. WORK = 2;
  9. }
  10. message PhoneNumber {
  11. required string number = 1;
  12. optional PhoneType type = 2 [default = HOME];
  13. }
  14. repeated PhoneNumber phone = 4;
  15. }

编译该文件:

 protoc  person.proto   --objc_out=/Output/Directory/   

protoc会使用该插件编译.proto文件,最终生成两个文件:Person.pb.h 、Person.pb.m(不支持ARC

如果工程中使用了ARC ,所以需要使用-fno-objc-arc来标识相关的文件不使用ARC机制:

这个步骤通过后,说明ProtocoBuffer Compiler for Objective-C可以正常工作了。

4、在Xcode中使用ProtocolBuffer

将步骤2中protobuf-obj/src/runtime/Classes目录导入到Xcode项目中,导入时,选中”Copy items into destination group‘s folder(if needed)“。

导入位置选择项目根目录。导入完毕后,项目根目录下将会出现Classes目录,将该目录改名为ProtocolBuffers(注意最后的s): mv Classes ProtocolBuffers

修改项目属性中”Build Settings-->Search Paths-->Header Search Paths”,将项目根目录“.”添加到头文件搜索路径中去。

这样ProtocolBuffer for Objective-C的工作环境就配置好了。

5、使用

1)、将步骤3中编译输出的Person.pb.h 和Person.pb.m添加到项目中

2)、将Person.pb.h 中的 #import <ProtocolBuffers/ProtocolBuffers.h> 改为#import"ProtocolBuffers/ProtocolBuffers.h"


3)、在需要使用的地方引入头文件:#import "Person.pb.h"

[cpp] view plaincopy

  1. - (void)viewDidLoad
  2. {
  3. [super viewDidLoad];
  4. // Do any additional setup after loading the view, typically from a nib.
  5. [self writeAndReadProtobuf];
  6. }
  7. - (void)writeAndReadProtobuf{
  8. Person *person = [[[[[Person builder] setName:@"极致"]
  9. setId:1]
  10. setEmail:@"[email protected]"] build];
  11. NSData *data = [person data];
  12. NSString *docPath = [self applicationDocumentsDirectory];
  13. NSString *path = [docPath stringByAppendingFormat:@"/person.data"];
  14. if ([data writeToFile:path atomically:YES]) {
  15. [self readFileWithPath:path];
  16. }
  17. }
  18. - (NSString *)applicationDocumentsDirectory {
  19. NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  20. NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
  21. return basePath;
  22. }
  23. - (void)readFileWithPath:(NSString *)path {
  24. NSData *data = [NSData dataWithContentsOfFile:path];
  25. Person *person = [Person parseFromData:data];
  26. if (person) {
  27. NSLog(@"\n id %d \n name: %@ \n email: %@ \n",person.id, person.name, person.email);
  28. }
  29. }

输出打印的结果如下:

遇到的问题:

在执行 ./autogen.sh时出现错误:   ./autogen.sh: line 10: autoreconf: command not found

         

解决办法:需要安装automake和autoconf:

 brew install automake

                      brew install autoconf 

时间: 2024-11-09 09:42:29

ProtocolBuffer for Objective-C 运行环境配置(真正测试过的)的相关文章

maven(六),外置maven运行环境配置

外置maven eclipse内置的maven插件是固定版本,如果要用其他版本的maven,可以使用外置maven 下载地址: http://maven.apache.org/download.cgi   window系统下载 apache-maven-3.3.9-bin.zip, 解压 进入eclipse首选项--maven--installations--add--选择刚解压的maven目录--完成 如图第一行是eclipse内置maven3.3.3版本,第三行是我们刚刚添加的3.3.9版本

C连接MySQL数据库开发之Xcode环境配置及测试

一.开发环境 Mac OS X 10.9.2 64位.Xcode5.1.MySQL5.5.37 64位 MySQL安装目录为:/usr/local/mysql 二.配置xcode连接mysql的编译选项 1> 将mysql头文件目录添加到xcode头文件搜索路径中 项目属性--> Build Settings --> Search Paths --> Header Search Paths,添加/usr/local/mysql/include 2> 将mysql库文件目录添加

C连接MySQL数据库开发之Windows环境配置及测试

一.开发环境 Win8.1 64位.VS2013.MySQL5.5.3764位 MySQL安装目录为:C:\Program Files\MySQL\MySQL Server 5.5 二.配置工程环境 首先创建一个控制台空项目,打开VS2013,文件--> 新建项目 --> 常规 --> 选择"空项目" 因为我们要使用MySQL数据库的API接口编程,所以需要将工程的附加头文件搜索目录和附件库文件搜索目录,指向MySQL安装目录对应的位置,下面是我机子上mysql库和头

(5)基本工作流(打包与运行环境配置)

完成以下操作,才能在编辑器中使用打包功能:   1.环境搭建(Win/Mac)   2.在编辑器中配置发布和打包设置 环境搭建&打包设置   一.Windows平台   注意:JDK.NDK.SDK.Framework的安装路径.电脑的系统变量配置.以及编辑器打包设置中这些工具的路径配置一定要都正确,任何一个地方不对,打包很有可能会出现错误.   1.从商店下载JDK,安装到英文目录,非英文尤其中文目录可能会导致打包出现异常问题. 安装成功后,Java目录下会生成2个文件夹,分别以jdk和jre

JAVA EE 运行环境配置(包含JAVA SE)

1.下载并安装jre-7u7-windows-i586.exe (最新的JAVA运行环境) 2.下载并安装java_ee_sdk-6u4-jdk7-windows.exe (Java EE & GlassFish Server的安装包)位置: C:\Program Files\glassfish3 3.系统环境变量配置:JAVA_HOME  C:\Program Files\glassfish3\jdk7 (安装目录)classpath  .;%JAVA_HOME%\lib;%JAVA_HOME

Egg.js运行环境配置场景

没有NODE_ENV和EGG_SERVER_ENV环境变量的场景 执行npm run dev,默认读取config.default.js. 执行npm run start,默认读取config.prod.js 有NODE_ENV和EGG_SERVER_ENV环境变量的场景 EGG_SERVER_ENV优先级高于NODE_ENV. 比如,要为开发流程增加集成测试环境 SIT.将 EGG_SERVER_ENV 设置成 sit(并建议设置 NODE_ENV = production,也可以不设置),启

Tomcat环境配置部署测试环境及架构

Tomcat环境配置已经在前面介绍过了,这边就为童鞋们介绍下对于Tomcat的架构是怎么样的! Tomcat的架构包含(bin.conf.lib.logs.temp.wenapps.work)等文件夹 下面就来分别介绍下对应的文件是做什么用的(常用的5个) BIN目录:这个目录文件里的主要作用是控制Tomcat的启动与关闭(使用catalina或者startup脚本),以及启动关闭有关的安全管理(uli)的等 常用命令: 启动Tomcat:   ./startup.sh 关闭Tomcat:  

Clang+llvm windows运行环境配置

下了官网Pre-built Binaries:Clang for Windows( llvm.org/releases/3.5.0/LLVM-3.5.0-win32.exe )03 Sep 2014 3.5.0 The LLVM Compiler Infrastructure(llvm.org) download LLVM(llvm.org/releases/) 由于刚刚安装了 TDM GCC 4.9.2 tdm64-gcc-4.9.2-3.exe 2014 December 12th(tdm-

centos 安装amp 运行环境+配置虚拟地址

一.安装 MySQL 首先来进行 MySQL 的安装.打开超级终端,输入: [[email protected] ~]# yum install mysql mysql-server 安装完毕,让 MySQL 能够随系统自动启动: [[email protected] ~]# chkconfig --levels 235 mysqld on[[email protected] ~]# /etc/init.d/mysqld start 设置 MySQL 数据 root 账户的密码: [[email