这更像是一个答案而不是一个问题,因为我已经弄清楚了,至少就干净地编译库而言。对我来说主要问题是让 shared_ptr 工作。
原料:
提升 v. 1.45.0
http://www.anddev.org/viewtopic.php?p=29939上的 STLport 版本。
NDK 版本 r4b。
方向:
在您的 Android.mk 文件中添加:
LOCAL_CFLAGS += -DBOOST_EXCEPTION_DISABLE -D_STLP_NO_EXCEPTIONS -DOS_ANDROID -D_STLP_USE_SIMPLE_NODE_ALLOC
在 stlport/stl/_string.h 的第 613 行删除对 __stl_throw_length_error 的调用。如果您愿意,可以使用 _STLP_NO_EXCEPTIONS。
在第 261 行之后编辑 boost/boost/smart_ptr/shared_ptr.hpp 以摆脱 shared_ptr 构造函数中对 boost::throw_exception 的调用。我在方法的整个主体周围使用了#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 的任何地方都包含标题。编译源代码并将其添加到您的库中。