env:
windows xp 32 bit
mingw official NDK1. 下载源代码
地址是 : 本文下载的是 boost_1_54_0.7z 2. 解压源代码到任意目录 本问解压后匹配文件: ***/boost154/tools/build/v2/user-config.jam3. 生成bjam.exe 打开cmd.exe 切换目录至 ***/boost154/输入命令: bootstrap.bat 回车
E:\boost\boost_1_54_0>bootstrap.bat
这样在***/boost154下生成 bjam.exe 和 b2.exe 4. 修改bjam配置文件user-config.jam 配置文件路径 ***/boost154/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 = ../../android/android-ndk-r8e ; using gcc : android4.6 : $(ANDROID_NDK)/toolchains/arm-linux-androideabi-4.6/prebuilt/$(androidPlatform)/bin/arm-linux-androideabi-g++ :$(ANDROID_NDK)/toolchains/arm-linux-androideabi-4.6/prebuilt/$(androidPlatform)/bin/arm-linux-androideabi-ar $(ANDROID_NDK)/toolchains/arm-linux-androideabi-4.6/prebuilt/$(androidPlatform)/bin/arm-linux-androideabi-ranlib --sysroot=$(ANDROID_NDK)/platforms/android-9/arch-arm -I$(ANDROID_NDK)/sources/cxx-stl/gnu-libstdc++/4.6/include -I$(ANDROID_NDK)/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 ;
注意: ANDROID_NDK 为NDK跟目录,匹配文件如: ../../android/android-ndk-r8e/sources/cxx-stl/gnu-libstdc++/4.6/include 这段配置比较微妙,最好复制后进行修改,开始自己写的时候不知道哪里错了,一直提示 大写 Error android4.6 一类的错误,无法开始编译 5. MinGW中输入bjam编译命令 打开mingw命令端口,切换至 ***/boost154/
输入如下注释中的命令,并回车
$ bjam --without-python toolset=gcc-android4.6 link=static runtime-link=static target-os=linux --stagedir=android
注意:
--stagedir 指定编译后库的存放目录,命令输入时的当前路径, 本文是 ***/boost154/android ,结果保存在 ***/boost154/android/lib 中 --without-python 不编译python库, 使用 --without-***屏蔽库 库列表可以是 atomic chrono context coroutine date_time exception filesystem graph graph_parallel iostreams locale log math mpi program_options python random regex serialization signals system test thread timer wave命令回车后首先会输出当前配置
Building the Boost C++ Libraries. Performing configuration checks - 32-bit : yes (cached) - arm : yes (cached) - has_icu builds : no (cached) warning: Graph library does not contain MPI-based parallel componen note: to enable them, add "using mpi ;" to your user-config.jam - zlib : no (cached) - iconv (libc) : no (cached) - iconv (separate) : no (cached) - icu : no (cached) - icu (lib64) : no (cached) - Boost.Locale needs either iconv or ICU library to be built. - Boost.Locale needs either iconv or ICU library to be built. - Boost.Locale needs either iconv or ICU library to be built. - Boost.Locale needs either iconv or ICU library to be built. - Boost.Locale needs either iconv or ICU library to be built. - Boost.Locale needs either iconv or ICU library to be built. - x86 : no (cached) - gcc visibility : yes (cached) - long double support : yes (cached) warning: skipping optional Message Passing Interface (MPI) library. note: to enable MPI support, add "using mpi ;" to user-config.jam. note: to suppress this message, pass "--without-mpi" to bjam. note: otherwise, you can safely ignore this message. Component configuration: - atomic : building - chrono : building - context : building - coroutine : building - date_time : building - exception : building - filesystem : building - graph : building - graph_parallel : building - iostreams : building - locale : building - log : building - math : building - mpi : building - program_options : building - python : not building - random : building - regex : building - serialization : building - signals : building - system : building - test : building - thread : building - timer : building - wave : building
编译结束后输出
...failed updating 5 targets... ...skipped 12 targets... ...updated 51 targets...
与官方下载库比较, ***/boost154/android/lib/中的库,没有生成有
context filesystem locale log python(输入命令时设置不编译,可能需要第三方库 thread zlib 下面的博文写NDK不支持wide chars,但是wserialization 、serialization都生成了.6.参考
本文方法主要参考 这篇播放写NDK不支持wide chars,并且 CrystaX官网也写NDK不支持wide chars, boost-for-android 补丁工程 提供补丁修改boost代码,貌似能解决上面编译不过的库 提供批处理和bjam配置文件...不会用...... CrystaX官方 boost邮件关于android/ios的问答 几个编译笔记
----------------------2013-09-18---11:43:13
重新编译,均使用MinGW
1.Mingw编译bjam.exe
Mingw终端切换至
boost_1_53_0\tools\build\v2\engine 目录 执行
$ build.sh 等到提示: [COMPILE] bin.ntx86\b2.exe [COPY] bin.ntx86\bjam.exe ...updated 2 targets... 将 boost_1_53_0\tools\build\v2\engine\bin.ntx86 目录下的bjam.exe拷贝到 boost_1_53_0 目录下2.修改bjam配置文件
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 ;}else if [ os.name ] = MACOSX {androidPlatform = darwin-x86 ;}modules.poke : NO_BZIP2 : 1 ;ANDROID_NDK = ../../code_other/android/android-ndk-r8e ;using gcc : android4.6 :$(ANDROID_NDK)/toolchains/arm-linux-androideabi-4.6/prebuilt/$(androidPlatform)/bin/arm-linux-androideabi-g++ :$(ANDROID_NDK)/toolchains/arm-linux-androideabi-4.6/prebuilt/$(androidPlatform)/bin/arm-linux-androideabi-ar $(ANDROID_NDK)/toolchains/arm-linux-androideabi-4.6/prebuilt/$(androidPlatform)/bin/arm-linux-androideabi-ranlib -fexceptions -frtti -fpic -ffunction-sections -funwind-tables -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -Wno-psabi -march=armv5te -mtune=xscale -msoft-float -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -I$(ANDROID_NDK)/platforms/android-9/arch-arm/usr/include -Wa,--noexecstack -DANDROID -D__ANDROID__ -DNDEBUG -O2 -g -I$(ANDROID_NDK)/sources/cxx-stl/gnu-libstdc++/4.6/include -I$(ANDROID_NDK)/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi/include;
需要跟上 ranlib 这个标签,否则会显示 archiver
'"..\..\code_other\android\android-ndk-r8e\toolchains\arm-linux-androideabi-4.6\prebuilt\windows\bin"' 不是内部或外部命令, 也不是可运行的程序或批处理文件。不理解,gcc 能找到,ar找不到.3.打补丁
将 提供的1.53的补丁拷贝至 boost_1_53_0\MinGW终端切换至 boost_1_53_0 的父目录,执行
$ patch -Np1 -d boost_1_53_0 < boost_1_53_0/boost-1_53_0.patch
会输出:
patching file boost/asio/detail/socket_types.hppHunk #1 succeeded at 124 (offset 1 line).patching file boost/asio/ip/impl/address_v6.ipppatching file boost/config/user.hpppatching file boost/detail/endian.hpppatching file boost/interprocess/detail/workaround.hpppatching file libs/filesystem/src/operations.cpppatching file tools/build/v2/tools/android.jampatching file tools/build/v2/tools/android.py
4.编译
MinGW切换至目录 boost_1_53_0,执行
$ bjam --without-python toolset=gcc-android4.6 link=static runtime-link=static target-os=linux --stagedir=android_static
libboost_thread-gcc-mt-s-1_53.a库无法生成.还是提示: libs\thread\src\win32\thread.cpp:31:21: fatal error: process.h: No such file or directory
libboost_context-gcc-mt-s-1_53.a没有生成,'armasm' 不是内部或外部命令,也不是可运行的程序