这更像是一个答案而不是一个问题,因为我已经找出来了,至少可以干净地编译库。对我来说,主要的问题是让shared_ptr正常工作。
材料:
Boost v. 1.45.0
STLport版本在http://www.anddev.org/viewtopic.php?p=29939上获取。
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。
在 boost/boost/smart_ptr/shared_ptr.hpp 的第 261 行后进行编辑,以消除 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的任何位置都要包含这个头文件。编译源代码并将其添加到您的库中。