zoukankan      html  css  js  c++  java
  • windows下编译boost for android

    env:

          windows xp 32 bit
          mingw
          official  NDK

    1. 下载源代码
        地址是 :http://sourceforge.net/projects/boost/files/boost/1.54.0/
        本文下载的是 boost_1_54_0.7z 
    2. 解压源代码到任意目录
        本问解压后匹配文件:  ***/boost154/tools/build/v2/user-config.jam
    3. 生成bjam.exe
        打开cmd.exe
        切换目录至 ***/boost154/
        

      输入命令: bootstrap.bat  回车 

    E:oostoost_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 ;
    usinggcc : 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
    ;

        
        注意:
         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=staticruntime-link=statictarget-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 doublesupport      : yes (cached)
    warning: skipping optional Message Passing Interface (MPI) library.
    note: to enable MPI support, add"using mpi ;" to user-config.jam.
    note: to suppressthis message, pass"--without-mpi" to bjam.
    note: otherwise, you can safely ignorethis 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.参考
        
        本文方法主要参考
        http://www.codexperiments.com/android/2011/05/tips-tricks-building-boost-with-ndk-r5/
        这篇播放写NDK不支持wide chars,并且 CrystaX官网也写NDK不支持wide chars,
        
        boost-for-android 补丁工程
        https://github.com/MysticTreeGames/Boost-for-Android/archive/master.zip
        提供补丁修改boost代码,貌似能解决上面编译不过的库
        提供批处理和bjam配置文件...不会用......
        
        CrystaX官方
        http://www.crystax.net/en/android/ndk?format=php
        
        boost邮件关于android/ios的问答
        http://lists.boost.org/Archives/boost/2012/12/199676.php
        
        几个编译笔记
        http://www.cppblog.com/sunicdavy/archive/2013/07/20/201993.html
        http://blog.sina.com.cn/s/blog_a6946c8a01016aot.html

    ----------------------2013-09-18---11:43:13

      重新编译,均使用MinGW

    1.Mingw编译bjam.exe

      Mingw终端切换至   

      boost_1_53_0 oolsuildv2engine 目录 执行
      $ build.sh
      等到提示:
        [COMPILE] bin.ntx862.exe
        [COPY] bin.ntx86jam.exe
        ...updated 2 targets...
         
      将 boost_1_53_0 oolsuildv2enginein.ntx86 目录下的bjam.exe拷贝到 boost_1_53_0 目录下

    2.修改bjam配置文件
      boost_1_53_0 oolsuildv2user-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 ;
    usinggcc : 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>-fexceptions
    <compileflags>-frtti
    <compileflags>-fpic
    <compileflags>-ffunction-sections
    <compileflags>-funwind-tables
    <compileflags>-D__ARM_ARCH_5__
    <compileflags>-D__ARM_ARCH_5T__
    <compileflags>-D__ARM_ARCH_5E__
    <compileflags>-D__ARM_ARCH_5TE__
    <compileflags>-Wno-psabi
    <compileflags>-march=armv5te
    <compileflags>-mtune=xscale
    <compileflags>-msoft-float
    <compileflags>-mthumb
    <compileflags>-Os
    <compileflags>-fomit-frame-pointer
    <compileflags>-fno-strict-aliasing
    <compileflags>-finline-limit=64
    <compileflags>-I$(ANDROID_NDK)/platforms/android-9/arch-arm/usr/include
    <compileflags>-Wa,--noexecstack
    <compileflags>-DANDROID
    <compileflags>-D__ANDROID__
    <compileflags>-DNDEBUG
    <compileflags>-O2
    <compileflags>-g
    <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
    ;

        需要跟上 ranlib 这个标签,否则会显示 archiver 
            '"....code_otherandroidandroid-ndk-r8e oolchainsarm-linux-androideabi-4.6prebuiltwindowsin"' 不是内部或外部命令,
            也不是可运行的程序或批处理文件。不理解,gcc 能找到,ar找不到.

    3.打补丁

        将https://github.com/MysticTreeGames/Boost-for-Android 提供的1.53的补丁拷贝至 boost_1_53_0MinGW终端切换至 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.hpp
    Hunk #1 succeeded at 124 (offset 1 line).
    patching file boost/asio/ip/impl/address_v6.ipp
    patching file boost/config/user.hpp
    patching file boost/detail/endian.hpp
    patching file boost/interprocess/detail/workaround.hpp
    patching file libs/filesystem/src/operations.cpp
    patching file tools/build/v2/tools/android.jam
    patching file tools/build/v2/tools/android.py                        

    4.编译

        MinGW切换至目录 boost_1_53_0,执行

    $ bjam --without-python toolset=gcc-android4.6 link=staticruntime-link=statictarget-os=linux --stagedir=android_static

         

        libboost_thread-gcc-mt-s-1_53.a库无法生成.还是提示: libs hreadsrcwin32 hread.cpp:31:21: fatal error: process.h: No such file or directory

        libboost_context-gcc-mt-s-1_53.a没有生成,'armasm' 不是内部或外部命令,也不是可运行的程序


  • 相关阅读:
    git, tornado 小计
    算法小计-列表排列
    CMDB小计1
    linux 中mysql的主从复制
    SQL语句的种类
    mysql的结构,段页区,及客户端命令
    mysql的程序结构,实例, 及mysql的多实例
    在linux中操作mysql误删root用户的应对方法
    MySQL面试
    linux下载安装mysal
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13318677.html
Copyright © 2011-2022 走看看