【问题标题】:Port Boost to Android移植到 Android
【发布时间】:2011-02-03 05:09:04
【问题描述】:

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

我找到了为 android (https://github.com/MysticTreeGames/Boost-for-Android) 构建 boost 的工具,构建成功,并且我有静态 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 构建,但没有解决问题。

有什么想法吗?

【问题讨论】:

  • 您也应该在此处粘贴链接器错误。逐字。很少有记者有时间尝试复制您的设置,但好的错误消息将帮助读者了解正在发生的事情。

标签: boost android-ndk


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我刚刚找到了一种在android NDK下构建boost的简单方法,不需要修补boost。

    我不使用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 "使用 gcc : android : arm-linux-androideabi-g++ ;" > $HOME/user-config.jam

    4. 构建示例

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

    希望这些对你有帮助。

    【讨论】:

      【解决方案3】:

      您可以下载一组脚本,这些脚本将在此位置下载和构建一些流行的适用于 android 和 ios 的 c/c++ 开源库,包括 boost。

      https://github.com/mevansam/cmoss

      【讨论】: