Это скорее ответ, чем вопрос, потому что я понял это, по крайней мере, до чисто компиляции библиотеки. Основной проблемой для меня было заставить работать shared_ptr.
Состав:
Boost v. 1.45.0
Версия STLport на http://www.anddev.org/viewtopic.php?p=29939.
Версия r4b для NDK.
Направления:
В вашем файле Android.mk добавьте:
LOCAL_CFLAGS += -DBOOST_EXCEPTION_DISABLE -D_STLP_NO_EXCEPTIONS -DOS_ANDROID -D_STLP_USE_SIMPLE_NODE_ALLOC
Удалите вызов __stl_throw_length_error по строке 613 из stlport/stl/_string.h. Вы можете использовать _STLP_NO_EXCEPTIONS, если хотите.
Измените boost/boost/smart_ptr/shared_ptr.hpp после строки 261, чтобы избавиться от вызова boost:: throw_exception в конструкторе shared_ptr. Я использовал #ifndef BOOST_EXCEPTION_DISABLE для всего тела метода. (Но см. Ответ ниже.)
Затем вам нужно предоставить некоторые недостающие части. Создайте файл заголовка со следующим:
#ifdef OS_ANDROID
#include <exception>
namespace std
{
struct bad_alloc : public exception { bad_alloc operator()(){}};
}
#endif
и исходный файл с выделенным классом исключений для поддержки bad_alloc:
#ifdef OS_ANDROID
#include <exception>
namespace std
{
exception::exception() {}
exception::~exception() {}
const char* exception::what() const {}
}
#endif
Включите заголовок везде, где вы включаете boost/shared_ptr.hpp. Скомпилируйте источник и добавьте его в свою библиотеку.