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:\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++ :
<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=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.参考
本文方法主要参考
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\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++
:
<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_other\android\android-ndk-r8e\toolchains\arm-linux-androideabi-4.6\prebuilt\windows\bin"' 不是内部或外部命令,
也不是可运行的程序或批处理文件。不理解,gcc 能找到,ar找不到.
3.打补丁
将https://github.com/MysticTreeGames/Boost-for-Android 提供的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.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=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' 不是内部或外部命令,也不是可运行的程序
windows下编译boost for android的更多相关文章
- 如何在WINDOWS下编译BOOST C++库 .
如何在WINDOWS下编译BOOST C++库 cheungmine 2008-6-25 写出来,怕自己以后忘记了,也为初学者参考.使用VC8.0和boost1.35.0. 1)下载boost ...
- Android ijkplayer在windows下编译并导入Android Studio
我是看着里面的步骤来做的,由于我自己对Linux环境和命令不熟悉,导致我对Cygwin的知识为零,在编译ijkplayer的时候走了一点弯路,需要的同学先去看一下上面的这篇文章,我这边是对上面文章做 ...
- windows下编译Boost
当前boost最新版本为1.55,下载地址:http://sourceforge.net/projects/boost/files/boost/1.55.0/或者从官网(www.boost.org)下 ...
- Ubuntu下编译boost for Android
下载https://github.com/moritz-wundke/Boost-for-Android 解压后进入目录 运行 ./build-android.sh $(NDK_ROOT) NDK_R ...
- windows下编译Boost库
下载源码 boost_1_66_0.7z 生成编译工具 D:\Project\boost_1_66_0> bootstrap.bat 配置Python环境变量(使用VS2017自带的32位pyt ...
- osg for android学习之一:windows下编译(亲测通过)【转】
1. 首先需要一个OSG for android的环境 (1)NDK 现在Eclipse 对NDK已经相当友好了,已经不需要另外cygwin的参与,具体可以参考 Android NDK开发篇(一):新 ...
- windows下编译和安装boost库
boost是一个功能强大.构造精巧.跨平台.开源并且完全免费的C++程序库. 获取方式 boost提供源码形式的安装包,可以从boost官方网站下载,目前最新版本是1.59.0. 本机上正好有boos ...
- react-native —— 在Windows下搭建React Native Android开发环境
在Windows下搭建React Native Android开发环境 前段时间在开发者头条收藏了 @天地之灵_邓鋆 分享的<在Windows下搭建React Native Android开发环 ...
- 一步步实现windows版ijkplayer系列文章之四——windows下编译ijkplyer版ffmpeg
一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...
随机推荐
- Spark(四) -- Spark工作机制
一.应用执行机制 一个应用的生命周期即,用户提交自定义的作业之后,Spark框架进行处理的一系列过程. 在这个过程中,不同的时间段里,应用会被拆分为不同的形态来执行. 1.应用执行过程中的基本组件和形 ...
- 怎么成为PHP专家
当阅读各种和PHP相关的博客.Quora问题.Google+社区.资讯和杂 志的时候,经常会注意到在技术上出现两极分化的现象.问题均围绕在“我如何连接到一个MySQL数据库?”,或者是“我如何使得邮件 ...
- Python——在Python中如何使用Linux的epoll
在Python中如何使用Linux的epoll 目录 序言 阻塞socket编程示例 异步socket的好处以及Linux epoll 带epoll的异步socket编程示例 性能注意事项 源代码 序 ...
- TP框架中模糊查询实现
TP框架中模糊查询实现 $where['g.name'] = array('like','%'.$groupname.'%'); 表达式查询 上面的查询条件仅仅是一个简单的相等判断,可以使用查询表达式 ...
- linux命令之head、tail命令具体解释
head 语法 样例 tail 语法 样例 head和tail组合使用方法举例 head 语法 head [-n -k ]... [FILE]... 样例 默认是显示开头前10行. head /etc ...
- java中string和int互相转化 (转)
1 如何将字串 String 转换成整数 int? A. 有两个方法: 1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt([ ...
- IFrame和Ajax比較
说到比較,可能我是须要把这连个东西都给大家介绍一下的,可是介于大家都已经有了非常多的理解.我就简单的说了. Ajax: 是指一种创建交互式网页应用的网页开发技术.主要是利用Xm ...
- mysql添加修改字段
ALTER TABLE `uc_organization` ADD COLUMN `agent_id` VARCHAR(50) NOT NULL DEFAULT 0 COMMENT 'sqlserve ...
- IE6 ajax解析parseerror
IE6下,用a[href="javascript:void(0);"]或者a[href="javascript:;"]发起ajax|jsonp请求会出现请求成功 ...
- 分别在.NET Framework 与 .NET Core 框架下 编写Windows Service(windows服务程序)
前言,为什么会分别在两个框架下编写Windows Service,是因为最近在做区块链这块,使用的是NEO(小蚁区块链)的相关技术,NEO使用的是.net core 2.1,业务上需要写两个程序,一个 ...