交叉编译 google protobuf

source: http://blog.csdn.net/yuezhiren/article/details/8094755

     文章记录了交叉编译google protobuf 的整个过程。

build 环境: 

            OS/hardware-platform :  Linux ubuntu 3.2.0-32-generic-pae #51-Ubuntu SMP Wed Sep 26 21:54:23 UTC 2012 i686 i686 i386 GNU/Linux

            CROSS_COMPILER    :  gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72)   【已经设置了PATH 】

Target 环境: 

           OS/hardware-platform  :     Linux at91.linux 2.6.30 #2 Wed Oct 10 23:33:55 CST 2012 armv5tejl GNU/Linux


1.  从官网下载最新的 protobuf,  https://code.google.com/p/protobuf/downloads/list  ,目前最新的是 2.4.1

     

[plain] view plain copy
  1. tar -xvjf  protobuf-2.4.1.tar.bz2      

     【tar tips: 首个字符 x 是必须的 , 代表解压;    v 代表 verbose, 代表输出所有解压文件信息 ;  j 代表 bzip2 ,即 bz2格式, 有时候也用z,  z代表 gzip ; f 代表使用的是归档文件   】


2 . build protobuf  , 有以下需要注意的地方:

     <1>  protobuf 中的 README.txt 提到了在交叉编译 protobuf 时需要加上选项  --with-protoc , 例如, 如果在本地已经安装过 protobuf, 则 configure 的配置选项:


[plain] view plain copy
  1. ./configure --with-protoc=protoc 【。。。。。。。。。其他配置选项】  

需要注意的是 protoc 的版本必须要当前protobuf版本一致。

我的做法是: 先再本地编译/安装protobuf,然后再按照上面的样式指定

[plain] view plain copy
  1. ./confgure  
  2. make  
  3. sudo make install  
  4. make distclean  
  5. ./configure --with-protoc=protoc  【。。。。。。。。。其他配置选项】  

详细内容猛戳 :README.txt


<2> 启用 configure 的交叉编译功能

重点在于如何通过命令行启用 configure 的交叉编译功能,这些命令行又是如何在起作用。需要注意的是,

2.4.1所使用的 autoconf 是 2.65, 随着升级, autoconf 发生了很多变化, 具体解释请猛戳 :从2.13升级到2.50

重点的命令行如下 :

--build 用于描述编译环境, 在我的环境中设置为 i686-pc-linux (x86_64 , ubuntu)


--host 用于描述目标程序包的运行环境,当 --host 与 --build 的值不同时,启用交叉编译模式。 

在我的环境中设置为 arm-linux。 【由于历史原因,当设置 --host 时,一定需要设置 --build】


--target 用于配置交叉编译环境(很少用到),默认与 --host 相同。 比如我的host 设置成为 arm-linux ,

那么使用的 arm-linux-gcc 编译。

【还没有搞清楚详细的交叉编译配置功能,暂时就我的机器来看, configure 是这么做的】


  这么一来我的机器的 configure 命令行则为 :

[plain] view plain copy
  1. ./configure --build=i686-pc-linux  --host=arm-linux --with-protoc=protoc  

注1 :   autoconf 用户手册

注2 : 三个参数的说明

注3  :   交叉编译说明


<3> 其他 , 包括设置安装路径, 设置静态库

   为了方便开发, 我使用的是 nfs root 【详细猛戳 :  NFS-HOWTO 】 , 所以只需要把 protobuf 安装到本地目录下即可,另外由于静态链接会提升运行性能,所以使用编译静态库,整个 configure 则为 :

[plain] view plain copy
  1. ./configure --build=i686-pc-linux  --host=arm-linux --with-protoc=protoc --disable-shared --prefix=/home/marmot/sample_fs/rootfs/usr  

      然后 

      make

      sudo make install 即可


3 .  在嵌入式系统中使用 protobuf

       protobuf-lite 是 专门为嵌入式系统优化的runtime,牺牲了一些特性,换来了一些相对小的库以及不错的性能.

      要使用protobuf-lite ,需要在所定义的proto文件中需要声明:

       

[plain] view plain copy
  1. option optimize_for = LITE_RUNTIME;  


帮助猛戳  :  protobuf language guide 


还有一个问题没有搞定:

     编译armv5版本的protobuf,编译器默认 armv4T


[ 根据 automake 中关于 user variable 中的说明, 再 configure 预定义CFLAGS CXXFLAGS一下就可以使用了 ]

[plain] view plain copy
  1. ./configure --build=i686-pc-linux  --host=arm-linux --with-protoc=protoc --disable-shared --prefix=/home/marmot/Downloads/testinstall CFLAGS=' -march=armv5 '  CXXFLAGS=' -march=armv5  ' 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要进行交叉编译protobuf,您需要以下步骤: 1. 确定目标平台的架构和操作系统,例如 ARM 架构的 Linux 系统。 2. 安装交叉编译工具链,该工具链包括交叉编译器和库文件。这些工具可用于在开发机上编译目标平台的代码。具体的安装方法因不同的平台而异。 3. 下载protobuf源代码,您可以从GitHub上下载最新版本的protobuf源代码。解压后进入protobuf源代码目录。 4. 配置protobuf源代码的编译选项。运行如下命令: ``` ./configure --host=target --with-sysroot=path/to/sysroot ``` 其中,`--host` 参数指定目标平台的架构和操作系统,`--with-sysroot` 参数指定交叉编译器的 sysroot 路径。 5. 运行 make 命令来编译protobuf。如果一切正常,make 命令将生成一个可执行文件,名为 `protoc`,它是 protobuf 的编译器。 ``` make ``` 6. 运行 make install 命令来安装protobuf。 ``` make install ``` 完成上述步骤后,您就可以在目标平台上使用 protobuf 了。 ### 回答2: 交叉编译是指在一台机器上编译适用于另一种体系结构的软件。若要进行protobuf交叉编译,可以按照以下步骤进行操作: 1. 准备交叉编译工具链:首先需要安装适用于目标体系结构的交叉编译工具链,可以通过搜索引擎获取相关的工具链安装方式。 2. 下载与安装protobuf源码:从protobuf的官方GitHub仓库下载最新的源码,并解压缩到本地文件夹。 3. 配置交叉编译环境变量:进入protobuf的源码文件夹,在命令行中设置交叉编译的环境变量,以便正确地使用交叉编译工具链。 4. 配置编译参数:使用文本编辑器打开源码文件夹中的根目录下的`configure`文件,并修改其中的编译参数。根据目标体系结构的不同,可以根据需要进行添加、修改或删除一些参数。 5. 运行配置脚本:在命令行中运行`./configure`命令,开始配置protobuf的编译环境。 6. 编译protobuf:运行`make`命令开始编译protobuf。编译过程可能需要一些时间,请耐心等待完成。 7. 交叉编译结果获取:编译完成后,在源码文件夹中可以找到编译好的protobuf二进制文件。将这些文件拷贝到目标体系结构所在的机器中。 以上是一个简单的protobuf交叉编译的过程。具体的操作步骤可能因不同的体系结构而有所差异,可以根据实际需要进行相应的修改和调整。 ### 回答3: 交叉编译protobuf可以按照以下步骤进行: 1. 首先,确保在本地机器上安装了protoc编译器和protobuf库。如果没有,可以从官方网站下载并按照官方文档进行安装。 2. 创建一个交叉编译工具链。根据目标平台的不同,选择合适的交叉编译工具链来编译protobuf。这通常包括交叉编译器、库文件和头文件,可以从目标平台的官方网站或其他来源获取。 3. 下载protobuf源码,并解压到本地。 4. 进入protobuf源码目录,并使用交叉编译工具链的前缀指定编译器和链接器,执行以下命令进行配置: ``` $ ./configure --host=目标平台-triplet --with-protoc=protoc路径 ``` 注意将目标平台-triplet替换为交叉编译工具链的前缀,将protoc路径替换为本地机器上protoc的路径。 5. 执行make命令进行编译。这将使用交叉编译工具链来编译protobuf,并生成目标平台的可执行文件和库文件。 6. 编译完成后,可以将生成的可执行文件和库文件拷贝到目标平台上进行部署和使用。 总结:交叉编译protobuf需要创建交叉编译工具链,并使用该工具链对protobuf源码进行配置和编译。通过这种方式,可以从一台机器上编译生成在另一台机器上运行的可执行文件和库文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值