Thursday, October 2, 2014

How to build Boost for Android

What we need:
Boost (http://switch.dl.sourceforge.net/project/boost/boost/1.56.0/boost_1_56_0.7z)
A compiler (Visual C++ 2010)
Android NDK (http://dl.google.com/android/ndk/android-ndk32-r10b-windows-x86.zip)

Download and extract Boost (ex: D:\boost; you can extract only boost, libs, tools subdirs and the files in the main dir).


Download and unzip Android NDK (ex: D:\android-ndk-r10b).



Go to  Boost_dir\tools\build\src and create a new file,
 user-config.jam  

Open that file with a text editor and add:

 import os ;  
 androidNDKRoot = D:/android-ndk-r10 ;
  using gcc : android :  
    $(androidNDKRoot)/toolchains/arm-linux-androideabi-4.8/prebuilt/windows/bin/arm-linux-androideabi-g++ :  
    <compileflags>--sysroot=$(androidNDKRoot)/platforms/android-9/arch-arm  
    <compileflags>-mthumb  
    <compileflags>-Os  
    <compileflags>-fno-strict-aliasing  
    <compileflags>-O2  
    <compileflags>-DNDEBUG  
    <compileflags>-g  
    <compileflags>-lstdc++  
    <compileflags>-I$(androidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.8/include  
    <compileflags>-I$(androidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi/include  
    <compileflags>-D__GLIBC__   
    <compileflags>-D__arm__  
    <archiver>$(androidNDKRoot)/toolchains/arm-linux-androideabi-4.8/prebuilt/windows/bin/arm-linux-androideabi-ar  
    <ranlib>$(androidNDKRoot)/toolchains/arm-linux-androideabi-4.8/prebuilt/windows/bin/arm-linux-androideabi-ranlib  
      ;  

Save and close that file.

Open Visual Studio Command Prompt.

Go to boost dir (cd  D:\boost).

Execute:
 bootstrap  



Execute:
 b2 ^  
 --without-python ^  
 --prefix=.\out\ ^
 --build-dir=.\build ^  
 variant=release ^  
 link=static runtime-link=static ^  
 toolset=gcc-android target-os=linux ^  
 threading=multi --stagedir=android stage


If everything went well, you will have the libs in "android" folder.


7 comments:

  1. can you please add how to build for android-x86?
    thanks a mil

    ReplyDelete
  2. Change the toolchain:
    $(androidNDKRoot)/toolchains/arm-linux-androideabi-4.8/prebuilt/windows/bin/arm-linux-androideabi-g++
    with the one for android-x86

    ReplyDelete
    Replies
    1. Hello,
      I also had to remove -mthumb. seems it's only for ARM.
      Thank you.

      Delete
  3. why don't you get a context lib;

    ReplyDelete
  4. Can you give me an explaintation of the compileflags or a reference of them? i currently get a problem with building boost for android arm 64-bit.
    Thank you.

    ReplyDelete
  5. Here: http://silverglint.com/boost-for-android/ you can find a simple and painless new way to build a modern (eg 1.64.0) version of boost for android.
    Works with clang and gcc.

    ReplyDelete
  6. This comment has been removed by the author.

    ReplyDelete