博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
windows下编译boost for android
阅读量:5818 次
发布时间:2019-06-18

本文共 8107 字,大约阅读时间需要 27 分钟。

   env:

      windows xp 32 bit

      mingw
      official  NDK

1. 下载源代码

    地址是 :
    本文下载的是 boost_1_54_0.7z 
2. 解压源代码到任意目录
    本问解压后匹配文件:  ***/boost154/tools/build/v2/user-config.jam
3. 生成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' 不是内部或外部命令,也不是可运行的程序

转载于:https://www.cnblogs.com/ezhong/p/3326258.html

你可能感兴趣的文章
POJ1033
查看>>
argparse - 命令行选项与参数解析(转)
查看>>
一维数组
查看>>
Linux学习笔记之三
查看>>
CentOS 6.6 FTP install
查看>>
oracle导入导出小记
查看>>
聊一聊log4j2配置文件log4j2.xml
查看>>
NeHe OpenGL教程 第七课:光照和键盘
查看>>
修改上一篇文章的node.js代码,支持默认页及支持中文
查看>>
Php实现版本比较接口
查看>>
删除设备和驱动器中软件图标
查看>>
第四章 TCP粘包/拆包问题的解决之道---4.1---
查看>>
html语言
查看>>
从源码看集合ArrayList
查看>>
spring-boot支持websocket
查看>>
菜鸟笔记(一) - Java常见的乱码问题
查看>>
我理想中的前端工作流
查看>>
记一次Git异常操作:将多个repository合并到同一repository的同一分支
查看>>
CodeIgniter 3.0 新手捣鼓源码(一) base_url()
查看>>
Chrome 广告屏蔽功能不影响浏览器性能
查看>>