Android跨平台编译 —— protobuf

2018-02-27 11:35:33来源:oschina作者:街角的小丑人点击

分享
前言

前言都在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=ONBy default is static library (*.a file). I want a
# shared library (*.so file).
# -DCMAKE_INSTALL_PREFIXBecause 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++_sharedFor 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 /
/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= /
-DANDROID_NDK= /
-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.
/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编译的,所以一定需要注释掉。


最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台