protobuf 交叉编译笔记

目标是使用 android ndk 的工具链编译出 android armeabi-v7a 可用的 protobuf 库。

交叉编译环境配置

windows 平台

  1. 下载 NDK x86_64 或者 NDK x86 并解压缩
  2. 下载 protobuf 源代码。这里以 protobuf 3.4.1 举例。
  3. 下载并安装最新的 cmake 3.10 x86_64 或者 cmake 3.10 x86

以上,准备完成。

使用 cmake 生成 makefile

选择一个你喜欢的位置,打开cmd,执行下述命令。

mkdir build
cd build
cmake -G "MinGW Makefiles" \
-DCMAKE_TOOLCHAIN_FILE=<Your NDK PATH>/build/cmake/android.toolchain.cmake \
-DCMAKE_MAKE_PROGRAM=<Your NDK PATH>/prebuilt/windows-x86_64/bin/make.exe \
-Dprotobuf_BUILD_TESTS=OFF \
<Protobuf source PATH>/cmake

几个关键参数略作解释。

CMAKE_TOOLCHAIN_FILE,这个变量指定了 cmake 使用的 toolchain 脚本,toolchain脚本会帮助配置交叉编译使用的头文件/库文件路径,配置编译器/链接器等一系列工具。

CMAKE_MAKE_PROGRAM,这个变量指定了cmake使用的make程序,如果系统的PATH中没有 make.exe 的话(通常也不会有,除非安装了 MinGW 并且配置了 PATH 环境变量),就需要指定使用的 make.exe 程序。这里使用了 ndk 自带的 prebuilt 版 make.exe

protobuf_BUILD_TESTS,不要编译测试用例,这一选项默认启用,但在交叉编译时会导致奇怪的问题。

-G "MinGW Makefiles",指定 cmake 生成 MinGW Makefile,即一般所说的 Makefile

编译

cmake --build . --target libprotobuf
cmake --build . --target libprotobuf-lite

分别编译libprotobuflibprotobuf-lite两个库,这两个库就是我们将会用到的 protobuf 静态库了。

protobuf/android 交叉编译笔记的更多相关文章

  1. Windows7 64位系统搭建Cocos2d-x-2.2.1最新版以及Android交叉编译环境(详细教程)

    Windows7 64位系统搭建Cocos2d-x-2.2.1最新版以及Android交叉编译环境(详细教程) 声明:本教程在参考了以下博文,并经过自己的摸索后实际操作得出,本教程系本人原创,由于升级 ...

  2. (转)Windows7 64位系统搭建Cocos2d-x 2.2.1最新版以及Android交叉编译环境(详细教程) .

    声明:本教程在参考了以下博文,并经过自己的摸索后实际操作得出,本教程系本人原创,由于升级后的cocos2d-x有了一些变化,目前的博文还没有关于Cocos2d-x 2.2.1最新版搭建Android交 ...

  3. Windows7 64位系统搭建Cocos2d-x 2.2.1最新版以及Android交叉编译环境(具体教程)

    原文地址:http://blog.csdn.net/sttyytw/article/details/17005263 声明:本教程在參考了下面博文,并经过自己的摸索后实际操作得出,本教程系本人原创,因 ...

  4. android 应用笔记

    android 应用笔记 android 应用笔记 小书匠 Android 综合教程 Android常用技巧 安卓系统架构 安卓源码开发 安卓驱动 Linux内核 安卓应用开发 Java 教程 tic ...

  5. Android 学习笔记之Volley(七)实现Json数据加载和解析...

    学习内容: 1.使用Volley实现异步加载Json数据...   Volley的第二大请求就是通过发送请求异步实现Json数据信息的加载,加载Json数据有两种方式,一种是通过获取Json对象,然后 ...

  6. Android开发笔记:打包数据库

    对于数据比较多的控制一般会加入SQLite数据库进行数据存储,在打包时这些数据库是不自动打包到apk中的,如何创建数据库呢 方法1:将创建数据库的sql语句在SQLiteHelper继承类中实现,在第 ...

  7. Android学习笔记进阶之在图片上涂鸦(能清屏)

    Android学习笔记进阶之在图片上涂鸦(能清屏) 2013-11-19 10:52 117人阅读 评论(0) 收藏 举报 HandWritingActivity.java package xiaos ...

  8. android学习笔记36——使用原始XML文件

    XML文件 android中使用XML文件,需要开发者手动创建res/xml文件夹. 实例如下: book.xml==> <?xml version="1.0" enc ...

  9. Android学习笔记之JSON数据解析

    转载:Android学习笔记44:JSON数据解析 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种 ...

随机推荐

  1. HDU3844Tour (好题)

    题意:   有N个点,M个单向边,现在要你设计N条路线覆盖所有的点,每个点都属于且值属于一个环.(为什么是N条边:和最小生成树为什么有N-1条边是一样的证明). 解析:  每个点都有一个喜欢对象(出度 ...

  2. Activiti 用户任务关联自定义表单

    问题阐述 通常每一个"用户任务"都会对应一个表单,以供用户录入信息.尤其是在"流程定义"拥有多个版本的情形下,明确的指定表单显得极其重要. 一份新版本的&quo ...

  3. 使用Kotlin开发第一个Android应用

    直奔主题 第一步:为AndroidStudio安装Kotlin插件 在线安装步骤:File—>Settings—>Plugins—>Install JetBrains plugin… ...

  4. JavaScript中的面向对象程序设计

    本文内容目录顺序: 1.Object概念讲述: 2.面向对象程序设计特点: 3.JavaScript中类和实例对象的创建: 4.原型概念: 5.原型API: 6.原型对象的具体使用:7.深入理解使用原 ...

  5. win10 uwp ContentDialog 点确定不关闭

    微软的ContentDialog不是一直有,而是UWP新的,可以使用Content放用户控件,使用很好,但是一点不好的是,默认的一点击下面按钮就会退出. 我们有时候需要ContentDialog用户输 ...

  6. socket__服务端于客户端

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2017/8/23 15:33 # @Author : Mr_zhang # @Site ...

  7. PHP 单例模式解析和实战

    一.什么是单例模式? 1.含义 作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局地提供这个实例.它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用. 2. ...

  8. admin的基础配置

    admin自定义配置 一.admin.py 我们知道在models.py文件中创建的数据表,一方面我们可以通过视图函数对其进行增删改查,一方面我们也可以通过admin进行,通常我们是通过admin的前 ...

  9. Python装饰器,json,pickle

    装饰器 定义:本质是函数,装饰其它函数是为了给其添加新功能: 原则:1.不能修改被装饰的函数的源代码 2.不能修改被装饰的函数的调用方式 实现装饰器知识储备: 1.函数即变量: 2.高阶函数 3.嵌套 ...

  10. linux安装redis-3.0.7

    一.Redis介绍 1.简介 Redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统.和Memcache类似,但很大程度补偿了Memcache的不足,它支持存储的value类 ...