Android 编译 boost库

boost是什么东东,就不再赘述,本文直接使用ndk编译boost库。

先说明一下环境:

操作系统:Ubuntu 14.04 64未

NDK:R9D(NDK32,NDK64尚未进行测试)


配置开发环境就不说了,首先下载boost 库,项目要求下载的是1.53.0从sourceforge上面下载的


先将boost库解压缩。

跟常规编译boost库一样,首先生成b2等工具

./bootstrap.sh

 生成之后,修改文件:

boost_1_53_0/tools/build/v2/user-config.jam


内容如下:

import os ;

if [ os.name ] = CYGWIN || [ os.name ] = NT {
androidPlatform = windows ;
}
else if [ os.name ] = LINUX {
androidPlatform = linux-x86_64 ;#如果使用的是32位的系统,需要修改成linux-x86
}
else if [ os.name ] = MACOSX {
androidPlatform = darwin-x86 ;
}

modules.poke : NO_BZIP2 : 1 ;
NDK_ROOT = /opt/android-ndk-r9d ;#将NDK的路径修改为实际的路径
using gcc : android4.6 : $(NDK_ROOT)/toolchains/arm-linux-androideabi-4.6/prebuilt/$(androidPlatform)/bin/arm-linux-androideabi-g++ :
$(NDK_ROOT)/toolchains/arm-linux-androideabi-4.6/prebuilt/$(androidPlatform)/bin/arm-linux-androideabi-ar
$(NDK_ROOT)/toolchains/arm-linux-androideabi-4.6/prebuilt/$(androidPlatform)/bin/arm-linux-androideabi-ranlib
--sysroot=$(NDK_ROOT)/platforms/android-9/arch-arm
-I$(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/4.6/include
-I$(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi/include
-DNDEBUG
-D__GLIBC__
-DBOOST_FILESYSTEM_VERSION=3
-lstdc++
-lgnustl_shared
-mthumb
-fno-strict-aliasing
-std=gnu++11
-O2
;


同时,由于使用了gnu++11,auto_ptr处于deprecated状态,替换成unique_ptr就可以解决。boost中唯一一处引用出现在boost/libs/signals/src/signal_base.cpp中的代码

//        std::auto_ptr slot(reinterpret_cast(data));
        std::unique_ptr slot(reinterpret_cast(data));

android不能使用

sys/statvfs.h

需要使用sys/vfs.h

将文件libs/filesystem/src/operations.cpp修改如下的内容:


#   if !defined(__APPLE__) && !defined(__OpenBSD__) && !defined(__ANDROID__)
#     include
#     define BOOST_STATVFS statvfs
#     define BOOST_STATVFS_F_FRSIZE vfs.f_frsize
#   else
#     ifdef __ANDROID__
#     include
#     endif
#     ifdef __OpenBSD__
#     include
#     endif
#     include
#     define BOOST_STATVFS statfs
#     define BOOST_STATVFS_F_FRSIZE static_cast(vfs.f_bsize)
#   endif

将文件保存之后,使用如下的命令进行编译:

./b2 --without-python --without-mpi --without-serialization toolset=gcc-android4.6 link=static runtime-link=static target-os=linux --stagedir=android

在boost根目录有个android的目录,生成的lib就在这个目录下面



你可能感兴趣的:(Android 编译 boost库)