Это скорее ответ, чем вопрос, потому что я разобрался с ним, по крайней мере, настолько, насколько правильно скомпилировал библиотеку. Основной проблемой для меня было заставить работать shared_ptr.
Состав:
Повышение v. 1.45.0
Версия STLport на http://www.anddev.org/viewtopic.php?p=29939.
Версия r4b НДК.
Направления:
В вашем файле 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. Скомпилируйте исходный код и добавьте его в свою библиотеку.