Android跨平台编译 —— protobuf

街角的小丑 · · 278 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

前言

    前言都在 Android跨平台编译 —— BOOST

正文

    直入正题。编译protobuf的android版本我们使用的环境如下

                CMake: 3.6
                NDK: r16b
                Protobuf: v3.5.1
                OS : Mac os 

    首先我们下载protobuf的代码https://github.com/google/protobuf/releases 直接下载cpp平台的就可以了。

    1  首先进入到cmake目录下,创建一个文件夹 build-armeabi-v7a

    2 然后我们在根目录下(protobuf的顶层目录)添加一个android.sh,代码如下

cd cmake && cd build-armeabi-v7a

# Step 3. Generate Makefile with CMake.
# -Dprotobuf_BUILD_SHARED_LIBS=ON           By default is static library (*.a file). I want a
#                                           shared library (*.so file).
# -DCMAKE_INSTALL_PREFIX                    Because it's a cross-compiled library. You probably
#                                           want to install the header files and shared library
#                                           in specific folder rather than default /usr/local 
#                                           directory.
# -DANDROID_STL=c++_shared                  For the library using C++11, link to C++11 runtime.
# -DANDROID_LINKER_FLAGS="-landroid -llog"  For the library using functions of libandroid.so
#                                           and liblog.so.
# -DANDROID_CPP_FEATURES="rtti exceptions"  Most ppl use exception and runtime-type-information 
#                                           features in their C++ projects.
#
# Debug Tips:
# Add -LAH to see variables.
#/Users/yxwang/Library/Android/sdk/cmake/3.6.4111459/bin/cmake \
<your-path-of>/cmake \
    -Dprotobuf_BUILD_SHARED_LIBS=OFF \
    -Dprotobuf_BUILD_STATIC_LIBS=ON \
    -DCMAKE_VERBOSE_MAKEFILE=ON \
    -Dprotobuf_BUILD_TEST=OFF \
    -Dprotobuf_BUILD_EXAMPLES=OFF \
    -DCMAKE_TOOLCHAIN_FILE=/Users/yxwang/Library/Android/sdk/ndk-bundle/build/cmake/android.toolchain.cmake \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_INSTALL_PREFIX=<install-path> \
    -DANDROID_NDK=<ndk-path> \
    -DANDROID_TOOLCHAIN=clang \
    -DANDROID_ABI=armeabi-v7a \
    -DANDROID_NATIVE_API_LEVEL=16 \
    -DANDROID_STL=c++_shared \
    -DANDROID_LINKER_FLAGS="-landroid -llog" \
    -DANDROID_CPP_FEATURES="rtti exceptions" \
    ..

# Step 4. Run Make with generated Makefile.
<your-path-of>/cmake --build .

# Step 5 (optional). Install the generated header files and shared library 
# to specific folder.
make install

    PS:注意这里的android.toolchain.cmake的地址,并不是直接放在sdk/cmake/version/下的那个文件……使用这个文件会报错。可以在android studio中创建一个拥有c++的项目,然后编译一次,在.externalNativeBuild/cmake_build_command.txt中能够找到位置,直接拿来用就行。

    另外这里生成的是.a的静态库,如果需要.so的动态库,可以吧上面protobuf_build_shared_libs这个编译选项设置为on

    3. 在运行之前还需要修改原来的 cmake文件

    

    

    我这里只留下了 protobuf-lite的库,所以最后也只会生成这个库。如果需要libprotobuf.so库,可以吧这部分也放出来。

    不过libprotoc和protoc是无法使用ndk编译的,所以一定需要注释掉。

 

本文来自:开源中国博客

感谢作者:街角的小丑

查看原文:Android跨平台编译 —— protobuf

278 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet