Cygwin环境下使用Android NDK r9c编译boost 1.55

基础阅读:

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 内容修改如下


[csharp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. import os ;  
  2.    
  3. if [ os.name ] = CYGWIN || [ os.name ] = NT {  
  4. androidPlatform = windows ;  
  5. }  
  6. else if [ os.name ] = LINUX {  
  7. androidPlatform = linux-x86_64 ;  
  8. }  
  9. else if [ os.name ] = MACOSX {  
  10. androidPlatform = darwin-x86 ;  
  11. }  
  12.    
  13. modules.poke : NO_BZIP2 : 1 ;  
  14. ANDROID_NDK = ../.. ;  
  15. using gcc : android4.6 : $(ANDROID_NDK)/toolchains/arm-linux-androideabi-4.6/prebuilt/$(androidPlatform)/bin/arm-linux-androideabi-g++ :  
  16. <archiver>$(ANDROID_NDK)/toolchains/arm-linux-androideabi-4.6/prebuilt/$(androidPlatform)/bin/arm-linux-androideabi-ar  
  17. <ranlib>$(ANDROID_NDK)/toolchains/arm-linux-androideabi-4.6/prebuilt/$(androidPlatform)/bin/arm-linux-androideabi-ranlib  
  18. <compileflags>--sysroot=$(ANDROID_NDK)/platforms/android-9/arch-arm  
  19. <compileflags>-I$(ANDROID_NDK)/sources/cxx-stl/gnu-libstdc++/4.6/include  
  20. <compileflags>-I$(ANDROID_NDK)/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi/include  
  21. <compileflags>-DNDEBUG  
  22. <compileflags>-D__GLIBC__  
  23. <compileflags>-DBOOST_FILESYSTEM_VERSION=3  
  24. <compileflags>-lstdc++  
  25. <compileflags>-lgnustl_shared  
  26. <compileflags>-mthumb  
  27. <compileflags>-fno-strict-aliasing  
  28. <compileflags>-std=gnu++11  
  29. <compileflags>-O2  
  30. ;  
  31.    


扫描二维码关注公众号,回复: 3241093 查看本文章

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

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //       std::auto_ptr<iterator> slot(reinterpret_cast<iterator*>(data));  
  2.        std::unique_ptr<iterator>slot(reinterpret_cast<iterator*>(data));  
  3.    

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, 内容如下

[plain]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. LOCAL_PATH:= $(call my-dir)  
  2.    
  3. include $(CLEAR_VARS)  
  4. LOCAL_MODULE:= boost_atomic  
  5. LOCAL_SRC_FILES:= android/lib/libboost_atomic.a  
  6. LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)  
  7. include $(PREBUILT_STATIC_LIBRARY)  
  8.    
  9. include $(CLEAR_VARS)  
  10. LOCAL_MODULE:= boost_chrono  
  11. LOCAL_SRC_FILES:= android/lib/libboost_chrono.a  
  12. LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)  
  13. include $(PREBUILT_STATIC_LIBRARY)  
  14.    
  15. include $(CLEAR_VARS)  
  16. LOCAL_MODULE:= boost_context  
  17. LOCAL_SRC_FILES:= android/lib/libboost_context.a  
  18. LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)  
  19. include $(PREBUILT_STATIC_LIBRARY)  
  20.    
  21. include $(CLEAR_VARS)  
  22. LOCAL_MODULE:= boost_date_time  
  23. LOCAL_SRC_FILES:= android/lib/libboost_date_time.a  
  24. LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)  
  25. include $(PREBUILT_STATIC_LIBRARY)  
  26.    
  27. include $(CLEAR_VARS)  
  28. LOCAL_MODULE:= boost_exception  
  29. LOCAL_SRC_FILES:= android/lib/libboost_exception.a  
  30. LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)  
  31. include $(PREBUILT_STATIC_LIBRARY)  
  32.    
  33. include $(CLEAR_VARS)  
  34. LOCAL_MODULE:= boost_filesystem  
  35. LOCAL_SRC_FILES:= android/lib/libboost_filesystem.a  
  36. LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)  
  37. include $(PREBUILT_STATIC_LIBRARY)  
  38.    
  39. include $(CLEAR_VARS)  
  40. LOCAL_MODULE:= boost_graph  
  41. LOCAL_SRC_FILES:= android/lib/libboost_graph.a  
  42. LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)  
  43. include $(PREBUILT_STATIC_LIBRARY)  
  44.    
  45. include $(CLEAR_VARS)  
  46. LOCAL_MODULE:= boost_iostreams  
  47. LOCAL_SRC_FILES:= android/lib/libboost_iostreams.a   
  48. LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)  
  49. include $(PREBUILT_STATIC_LIBRARY)  
  50.    
  51. include $(CLEAR_VARS)  
  52. LOCAL_MODULE:= boost_math_c99  
  53. LOCAL_SRC_FILES:= android/lib/libboost_math_c99.a  
  54. LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)  
  55. include $(PREBUILT_STATIC_LIBRARY)  
  56.    
  57. include $(CLEAR_VARS)  
  58. LOCAL_MODULE:= boost_math_c99f  
  59. LOCAL_SRC_FILES:= android/lib/libboost_math_c99f.a  
  60. LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)  
  61. include $(PREBUILT_STATIC_LIBRARY)  
  62.    
  63. include $(CLEAR_VARS)  
  64. LOCAL_MODULE:= boost_math_c99l  
  65. LOCAL_SRC_FILES:= android/lib/libboost_math_c99l.a  
  66. LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)  
  67. include $(PREBUILT_STATIC_LIBRARY)  
  68.    
  69. include $(CLEAR_VARS)  
  70. LOCAL_MODULE:= boost_math_tr1  
  71. LOCAL_SRC_FILES:= android/lib/libboost_math_tr1.a   
  72. LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)  
  73. include $(PREBUILT_STATIC_LIBRARY)  
  74.    
  75. include $(CLEAR_VARS)  
  76. LOCAL_MODULE:= boost_math_tr1f  
  77. LOCAL_SRC_FILES:= android/lib/libboost_math_tr1f.a  
  78. LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)  
  79. include $(PREBUILT_STATIC_LIBRARY)  
  80.    
  81. include $(CLEAR_VARS)  
  82. LOCAL_MODULE:= boost_math_tr1l  
  83. LOCAL_SRC_FILES:= android/lib/libboost_math_tr1l.a  
  84. LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)  
  85. include $(PREBUILT_STATIC_LIBRARY)  
  86.    
  87. include $(CLEAR_VARS)  
  88. LOCAL_MODULE:= boost_program_options  
  89. LOCAL_SRC_FILES:= android/lib/libboost_program_options.a  
  90. LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)  
  91. include $(PREBUILT_STATIC_LIBRARY)  
  92.    
  93. include $(CLEAR_VARS)  
  94. LOCAL_MODULE:= boost_random  
  95. LOCAL_SRC_FILES:= android/lib/libboost_random.a  
  96. LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)  
  97. include $(PREBUILT_STATIC_LIBRARY)  
  98.    
  99. include $(CLEAR_VARS)  
  100. LOCAL_MODULE:= boost_regex  
  101. LOCAL_SRC_FILES:= android/lib/libboost_regex.a  
  102. LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)  
  103. include $(PREBUILT_STATIC_LIBRARY)  
  104.    
  105.    
  106. include $(CLEAR_VARS)  
  107. LOCAL_MODULE:= boost_system  
  108. LOCAL_SRC_FILES:= android/lib/libboost_system.a  
  109. LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)  
  110. include $(PREBUILT_STATIC_LIBRARY)  
  111.    
  112. include $(CLEAR_VARS)  
  113. LOCAL_MODULE:= boost_thread  
  114. LOCAL_SRC_FILES:= android/lib/libboost_thread.a  
  115. LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)  
  116. include $(PREBUILT_STATIC_LIBRARY)  
  117.    
  118. include $(CLEAR_VARS)  
  119. LOCAL_MODULE:= boost_timer  
  120. LOCAL_SRC_FILES:= android/lib/libboost_timer.a  
  121. LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)  
  122. include $(PREBUILT_STATIC_LIBRARY)  
  123.    
可以根据自己的需要调整以上包含

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

应用程序设置:

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中添加

[plain]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. #使用stlport_static选项时,与boost一起使用,会在链接时产生如下错误:  
  2. # undefined reference to 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()'    
  3. APP_STL := gnustl_static #stlport_static  

示例代码:

NDK下使用boost示例

猜你喜欢

转载自blog.csdn.net/ly131420/article/details/41390379