0

次の投稿を読みましたが、私の場合には当てはまらないと思います: runtime_error was not defined in this scope for 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であり、 Android.mk ではなくApplication.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 に答える