【发布时间】:2011-05-19 19:54:38
【问题描述】:
这更像是一个答案而不是一个问题,因为我已经弄清楚了,至少就干净地编译库而言。我的主要问题是让 shared_ptr 工作。
成分:
Boost 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 的任何地方都包含标题。编译源代码并将其添加到您的库中。
【问题讨论】:
-
为了让这个问题永远不会被打开,如果您可以按照FAQ 的建议将这篇文章改写为一个问题然后自己回答,那将是非常酷的。
-
感谢您分享您所学到的知识!我相信这对很多人都有帮助。
-
Dennycrane,我仍在尝试这种方法,所以我想让它保持开放状态,以防有更多内容需要添加。当我得到一个运行良好的库时,我会报告它并以答案结束问题。
-
我同意@dennycrane 的观点,认为未来会更好,但更重要的是,您花时间以任何格式发布此有用的 SO 指南。我已经发现它很有帮助,我什至没有机会阅读它;简单地知道这是可能的将极大地帮助我设计我当前的项目。感谢您为我和许多其他人节省了以与您相同的方式找到答案的时间,无需任何问题提示您。
标签: c++ boost android-ndk stlport