类库大魔王
类库大魔王 多年C++、Go项目经验,长期从事跨平台(Windows/macOS/iOS/Android)应用架构设计与开发。

为4个平台编译Boost


公司的项目至今仍在使用Boost 1.56.0版本,最近发现Boost.uuid在Windows上居然会一直尝试去访问/dev/urandom,进而转移到系统盘根目录urandom文件,然后客户认为这会有安全隐患,需要修正。我随手看了一下Boost.uuid在1.56.0和1.64.0上的源代码,貌似确实1.56.0版并没有分系统实现,在1.64.0上为Windows系统使用平台特有的实现。于是我就建议升级Boost,然后发现这个third party的owner居然是我们组,同事开玩笑地问我能不能去为几个平台编译一下Boost,我当场就拒绝了,但回到家我还是决定折腾一下。

  • macOS和iOS平台使用了同一组脚本,从网上找的,我再自己稍做修改,macOS上只要x86_64架构的即可。
  • iOS上需要armv7,arm64,i386,x86_64四种架构的。
  • Android平台的搞了很久,昨天晚上折腾到12点多,今天又折腾了一个白天,终于搞定。网上有许多各种方案,在Linux,Windows,macOS上都有,我在Windows 10上折腾了很多次都不行,最后在macOS上成功了。首先,仍然是先构建bjam:

    1
    
    ./bootstrap.sh
    

    然后修改Boost根目录下的project-config.jam文件,用以下内容覆盖文件内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    import option ;
    
    using gcc : x86 : i686-linux-android-g++ ;
    using gcc : x86_64 : x86_64-linux-android-g++ ;
    using gcc : mipsel : mipsel-linux-android-g++ ;
    using gcc : mips64el : mips64el-linux-android-g++ ;
    using gcc : aarch64 : aarch64-linux-android-g++ ;
    using gcc : arm : arm-linux-androideabi-g++ ;
    
    option.set keep-going : false ;
    

    接着把Android NDK路径设置到环境变量中:

    1
    
    export androidNDKRoot=$HOME/android-ndk-r14b
    

    最后运行bjam进行编译

这样可以编译出armeabi等共6种目前官方NDK支持的架构的静态库。

感觉本文不错,不妨小额鼓励我一下!
如果你有Visa、MasterCard之类的国际银行卡,也可以考虑以下选项:
如果你看不到评论框,说明Disqus被墙了。