在Android编译并使用boost

在网上找了好多关于android如何编译和使用boost的文章,不时过时,就是行不通。花了些时间研究了这个问题,所以整理如下。由于文笔有限,大家在使用过程有问题,欢迎多交流。

Android NDK: android-ndk-r7-crystax-5.beta3( http://www.crystax.net/en/download
Boost For Android : https://github.com/MysticTreeGames/Boost-for-Android(选择Download Zip打包并下载,文件名为:Boost-for-Android-master.zip)

工程目录: /home/zzl/stream_prj/8_mobile_cli/
NDK及第三方库目录: /home/zzl/android/

一、编译 boost For Android

1 解压缩android-ndk-r7-crystax-5.beta3.zip到/home/zzl/android, 并建立环境变量
export NDK_ROOT=/home/zzl/android/android-ndk-r7-crystax-5.beta3

2 建立 NDK的 standalone 的编译环境
mkdir /home/zzl/stream_prj/8_mobile_cli/arm-linux-androideabi-4.6.3
cd ~/android/android-ndk-r7-crystax-5.beta3/build/tools
./make-standalone-toolchain.sh --platform=android-14 --install-dir= /home/zzl/stream_prj/8_mobile_cli/arm-linux-androideabi-4.6.3 --ndk-dir=$NDK_ROOT

3 定义环境变量
export ANDROID_SYSROOT=/home/zzl/stream_prj/8_mobile_cli/arm-linux-androideabi-4.6.3/sysroot
export CRY_STL_LIB_ROOT=/home/zzl/android/android-ndk-r7-crystax-5.beta3/sources/cxx-stl/gnu-libstdc++/libs/armeabi/4.6.3/

4 解压缩Boost-for-Android-master.zip到/home/zzl/android

5 编译boost(build-android.sh将自动下载指定版本boost, 然后打补丁,最后再编译,如果一切顺利,在build/lib下将生成.a的静态库)
cd /home/zzl/android/Boost-for-Android-master
./build-android.sh --boost=1.49.0 $NDK_ROOT (对于NDK crystax,由于Boost-for-Android目前最新只支持boost 1.49.0,所以指定这个版本)

6 定义几个boost的环境变量
export ANDROID_BOOST_INC=/home/zzl/android/Boost-for-Android-master/build/include/boost-1_49
export ANDROID_BOOST_LIB=/home/zzl/android/Boost-for-Android-master/build/lib


说明:
由于official NDK的STL对c++的RTTI、exceptions有些限制,而boost库又用到这些东东,所以才用 crystax. (曾经试用official NDK,未遂)


二、在NDK中使用boost库
写了一个非常简单的test.so

1 test.cpp代码

#include <string>
#include <boost/shared_ptr.hpp>
#include <boost/thread.hpp>

std::string add(const std::string& a, const std::string& b)
{
// some boost code......(在此省略)
return a + b;
}

2 MakeFile
有几点特别说明的地方(我花了不少时间在此),由于我是mpc工具生成makefile,文件内容较多,在此省略其它无关代码。

DYNAMICFLAGS = -DANDROID -D_EXCEPTIONS
CPPFLAGS = $(PICFLAGS) $(GENFLAGS) -fexceptions -frtti -D_REENTRANT -I"$(ANDROID_BOOST_INC)"
LDFLAGS = -L"." -L"$(ANDROID_BOOST_LIB)" -L"$(ANDROID_SYSROOT)/usr/lib" -L"$(CRY_STL_LIB_ROOT)" -fuse-ld=bfd
LDLIBS = -l"supc++$(LIBSUFFIX)" -l"gnustl_static$(LIBSUFFIX)" -l"boost_thread-gcc-mt-1_49$(LIBSUFFIX)" -l"boost_system-gcc-mt-1_49$(LIBSUFFIX)" -ldl

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页