0

我阅读了以下帖子,但我认为它不适用于我的情况:runtime_error 未在 g++ 4.1.2 的此范围内声明

我的问题几乎相同,但我正在尝试使用 Android-NDK (r8c) 编译文件,我检查了 NDK 是否有 stdexcept.h 并且确实如此。这是我的消息来源:

#include <stdexcept>

class RandomName : public std::runtime_error {
public:
  ...
};

这是我的 Android.mk 文件:

# File: Android.mk
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := interfacetest
LOCAL_SRC_FILES := file.cpp
LOCAL_CFLAGS    := -frtti

include $(BUILD_SHARED_LIBRARY)

我应该在 Android.mk 文件中添加一些行吗?

4

1 回答 1

3

在 CPLUSPLUS-SUPPORT.html 文件中的最新 NDK 文档中对此有很好的解释,尽管我将在此处生成相关位。对于默认系统运行时,提供的唯一标头是:

cassert cctype cerrno cfloat climits cmath csetjmp csignal cstddef
cstdint cstdio cstdlib cstring ctime cwchar new stl_pair.h typeinfo
实用程序

从 NDK 版本 8 开始,唯一支持异常的运行时是gnustl,您可以通过将以下内容添加到Application.mk而不是 Android.mk 来静态链接它:

APP_STL := gnustl_static

即使这样,您也需要一个额外的步骤:

自 NDK r5 起,NDK 工具链支持 C++ 异常,但是出于与以前版本的兼容性原因,所有 C++ 源默认情况下都使用 -fno-exceptions 支持进行编译。

要启用它,请在 Android.mk 中使用新的 LOCAL_CPP_FEATURES 变量,如下所示:

LOCAL_CPP_FEATURES += exceptions
于 2012-12-19T14:26:59.003 回答