基础阅读:

Windows环境下Android NDK环境搭建


1. boost官网下载boost_1_55_0.tar.gz,解压放在<NDK>/sources下, 解压后的文件名: boost_1_55_0

2. 运行Cygwin Terminal

3. 生成boost编译工具: 在boost目录下运行./bootstrap.sh 或者 bootstrap.bat 生成 b2


4. 修改 <boost>/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 ;}else if [ os.name ] = MACOSX {androidPlatform = darwin-x86 ;}modules.poke : NO_BZIP2 : 1 ;ANDROID_NDK = ../.. ;using gcc : android4.6 : $(ANDROID_NDK)/toolchains/arm-linux-androideabi-4.6/prebuilt/$(androidPlatform)/bin/arm-linux-androideabi-g++ :<archiver>$(ANDROID_NDK)/toolchains/arm-linux-androideabi-4.6/prebuilt/$(androidPlatform)/bin/arm-linux-androideabi-ar<ranlib>$(ANDROID_NDK)/toolchains/arm-linux-androideabi-4.6/prebuilt/$(androidPlatform)/bin/arm-linux-androideabi-ranlib<compileflags>--sysroot=$(ANDROID_NDK)/platforms/android-9/arch-arm<compileflags>-I$(ANDROID_NDK)/sources/cxx-stl/gnu-libstdc++/4.6/include<compileflags>-I$(ANDROID_NDK)/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi/include<compileflags>-DNDEBUG<compileflags>-D__GLIBC__<compileflags>-DBOOST_FILESYSTEM_VERSION=3<compileflags>-lstdc++<compileflags>-lgnustl_shared<compileflags>-mthumb<compileflags>-fno-strict-aliasing<compileflags>-std=gnu++11<compileflags>-O2; 


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

//       std::auto_ptr<iterator> slot(reinterpret_cast<iterator*>(data));       std::unique_ptr<iterator>slot(reinterpret_cast<iterator*>(data)); 

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


7. 在<boost>目录下,创建Android.mk, 内容如下

LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS)LOCAL_MODULE:= boost_atomicLOCAL_SRC_FILES:= android/lib/libboost_atomic.aLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS)LOCAL_MODULE:= boost_chronoLOCAL_SRC_FILES:= android/lib/libboost_chrono.aLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS)LOCAL_MODULE:= boost_contextLOCAL_SRC_FILES:= android/lib/libboost_context.aLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS)LOCAL_MODULE:= boost_date_timeLOCAL_SRC_FILES:= android/lib/libboost_date_time.aLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS)LOCAL_MODULE:= boost_exceptionLOCAL_SRC_FILES:= android/lib/libboost_exception.aLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS)LOCAL_MODULE:= boost_filesystemLOCAL_SRC_FILES:= android/lib/libboost_filesystem.aLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS)LOCAL_MODULE:= boost_graphLOCAL_SRC_FILES:= android/lib/libboost_graph.aLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS)LOCAL_MODULE:= boost_iostreamsLOCAL_SRC_FILES:= android/lib/libboost_iostreams.a LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS)LOCAL_MODULE:= boost_math_c99LOCAL_SRC_FILES:= android/lib/libboost_math_c99.aLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS)LOCAL_MODULE:= boost_math_c99fLOCAL_SRC_FILES:= android/lib/libboost_math_c99f.aLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS)LOCAL_MODULE:= boost_math_c99lLOCAL_SRC_FILES:= android/lib/libboost_math_c99l.aLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS)LOCAL_MODULE:= boost_math_tr1LOCAL_SRC_FILES:= android/lib/libboost_math_tr1.a LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS)LOCAL_MODULE:= boost_math_tr1fLOCAL_SRC_FILES:= android/lib/libboost_math_tr1f.aLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS)LOCAL_MODULE:= boost_math_tr1lLOCAL_SRC_FILES:= android/lib/libboost_math_tr1l.aLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS)LOCAL_MODULE:= boost_program_optionsLOCAL_SRC_FILES:= android/lib/libboost_program_options.aLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS)LOCAL_MODULE:= boost_randomLOCAL_SRC_FILES:= android/lib/libboost_random.aLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS)LOCAL_MODULE:= boost_regexLOCAL_SRC_FILES:= android/lib/libboost_regex.aLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)include $(PREBUILT_STATIC_LIBRARY)  include $(CLEAR_VARS)LOCAL_MODULE:= boost_systemLOCAL_SRC_FILES:= android/lib/libboost_system.aLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS)LOCAL_MODULE:= boost_threadLOCAL_SRC_FILES:= android/lib/libboost_thread.aLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS)LOCAL_MODULE:= boost_timerLOCAL_SRC_FILES:= android/lib/libboost_timer.aLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)include $(PREBUILT_STATIC_LIBRARY) 
可以根据自己的需要调整以上包含

-------------------------------------------------------------------------------------------------------------

应用程序设置:

1.在应用程序的Android.mk中添加

LOCAL_WHOLE_STATIC_LIBRARIES += boost_filesystem

LOCAL_WHOLE_STATIC_LIBRARIES += boost_system

用多少, 包多少

添加异常支持 LOCAL_CPPFLAGS += –fexceptions

添加模块引用$(call import-module,boost_1_55_0)


2. 在应用程序的Application.mk中添加

#使用stlport_static选项时,与boost一起使用,会在链接时产生如下错误:# undefined reference to 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()'  APP_STL := gnustl_static #stlport_static

示例代码:

NDK下使用boost示例



更多相关文章

  1. Android学习笔记一:Android开发环境搭建和第一个应用程序
  2. 【android】类似微信底部按钮标签实现
  3. Android(安卓)ApiDemos示例解析(101):Views->Auto Complete->3.
  4. 解决Google Android(安卓)SDK 无法下载
  5. Android(安卓)Studio中添加阿里云Maven仓库镜像
  6. Xamarin Mono For Android、Monotouch 安装
  7. Android(安卓)ApiDemos示例解析(49):Content->Resources->Styled
  8. Android(安卓)AndroidManifest.xml 结构详解
  9. Android(安卓)7.1新特性——长按出现快捷方式

随机推荐

  1. ImageView的属性android:scaleType
  2. Android(安卓)ListView动态刷新
  3. 系出名门Android(9) - 数据库支持(SQLite
  4. android 结构分析
  5. Android预定义样式
  6. ADT在线安装与更新
  7. Android中字体加粗
  8. Android(安卓)获取手机唯一标识(仅限IMEI
  9. Android之辅助服务下篇————Accessibi
  10. View常见XML属性及相关方法