Портирование Boost на Android

Кто-нибудь портировал и использовал Boost на Android?

Я нашел инструмент, который создает ускорение для Android (https://github.com/MysticTreeGames/Boost-for-Android), сборка прошла успешно, и у меня есть библиотеки для статического ускорения. Но когда я пытаюсь использовать его в простом приложении для Android:

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

void f()
{
};

у меня много ошибок компиляции: переопределения, необъявления и т. д. Кажется, это касается заголовков NDK std. Мой 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, но это не решило проблему.

Любые идеи?


person ackio    schedule 03.02.2011    source источник
comment
Вы также должны вставить сюда свои ошибки компоновщика. Дословно. Очень немногие корреспонденты имеют время, чтобы попытаться воспроизвести вашу настройку, но хорошие сообщения об ошибках помогут читателям понять, что происходит.   -  person Chris Jester-Young    schedule 03.02.2011


Ответы (3)


Я решил проблему. Я указал неверный путь к NDK. Скрипт также исправляет CrystaX NDK. Итак, теперь это работает!

person ackio    schedule 03.02.2011

Я только что нашел простой способ собрать буст под андроид NDK, который не требует исправления буста.

Я не использую Android.mk для сборки boost, вместо этого я использую для сборки автономную цепочку инструментов, просто свяжу цепочку инструментов CodeSourcery.

  1. Сначала подготовьте набор инструментов NDK:

    Установите цепочку инструментов NDK как автономную цепочку инструментов. См. $NDK/docs/STANDALONE-TOOLCHAIN.html.

    Добавьте путь к корзине cross-toolchain в PATH.

  2. Создайте инструмент boost.Build в Boost prj:

    ./бутстрап.ш

  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=статическая установка

Я надеюсь, что это может помочь вам.

person ryanking    schedule 08.07.2013

Вы можете скачать набор скриптов, которые будут загружать и создавать некоторые популярные библиотеки c/c++ с открытым исходным кодом для Android и ios, включая boost, по этому адресу.

https://github.com/mevansam/cmoss

person mks    schedule 13.01.2012