Port Boost到Android

时间:2011-02-03 05:09:04

标签: boost android-ndk

有人移植并在Android上使用Boost吗?

我找到了为android(https://github.com/MysticTreeGames/Boost-for-Android)构建boost的工具,构建成功,并且我有静态提升库。 但是,当我想在简单的Android应用程序中使用它时:

#include <jni.h>
#include "boost/thread.hpp"

void f()
{
};

我有很多编译错误:重新定义,未声明等等。似乎它涉及NDK标准标题。 我的Android.mk看起来像:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

TARGET_PLATFORM := android-8

LOCAL_MODULE := Boost

LOCAL_CFLAGS := -DMYSTIC -I$(LOCAL_PATH)/boost/include/ 
LOCAL_LDLIBS := -L$(LOCAL_PATH)/external/boost/lib/

LOCAL_CPPFLAGS  := -fexceptions
LOCAL_CPPFLAGS  += -frtti
LOCAL_CPPFLAGS  += -DBOOST_THREAD_LINUX
LOCAL_CPPFLAGS  += -DBOOST_HAS_PTHREADS
LOCAL_CPPFLAGS  += -D__arm__
LOCAL_CPPFLAGS  += -D_REENTRANT
LOCAL_CPPFLAGS  += -D_GLIBCXX__PTHREADS
LOCAL_CPPFLAGS  += -DBOOST_HAS_GETTIMEOFDAY

LOCAL_SRC_FILES := main.cpp

include $(BUILD_SHARED_LIBRARY)

此外,我尝试使用Crystax_NDK_r4和Android_NDK_r5b进行构建,但它还没有解决问题。

有什么想法吗?

3 个答案:

答案 0 :(得分:6)

我已经解决了这个问题。我指定了NDK的错误路径。脚本也修补了CrystaX NDK。所以现在它有效!

答案 1 :(得分:4)

我刚刚发现了一种在Android NDK下构建增强的简单方法,它不需要修补增强功能。

我不使用Android.mk来构建boost,而是使用standalone-toolchain来构建,只需链接CodeSourcery的工具链。

  1. 首先准备NDK工具链:

    将NDK工具链作为独立工具链安装。请参阅$ NDK / docs / STANDALONE-TOOLCHAIN.html

    将交叉工具链的bin路径添加到PATH

  2. 在Boost prj中构建boost.Build工具:

    ./ bootstrap.sh

  3. echo“using gcc:android:arm-linux-androideabi-g ++;” &GT; $ HOME /用户config.jam中

  4. 构建示例

    ./ b2 --prefix = $ HOME / mybuild --with-thread --with-system toolset = gcc-android threading = multi link = static install

  5. 我希望这些可以帮到你。

答案 2 :(得分:1)

您可以下载一系列脚本,这些脚本将为Android和ios下载并构建一些流行的c / c ++开源库,包括在此位置进行提升。

https://github.com/mevansam/cmoss