Comparable (関数 compareTo を持つインターフェイス) から継承する Square という単純な C++ クラスがあります。
これは、compareTo メソッドの C++ 実装です。
int Square::compareTo(Comparable* c, char criteria) {
if (dynamic_cast<Square*>(c) != NULL) {
return 2;
}
else {
return 4;
}
}
Android-ndk (r8c) でライブラリ (.so ファイル) を生成しました。Android.mk と Application.mk のコードの下を見つけます
Android.mk :
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := testinterface
LOCAL_SRC_FILES := wrappers.cpp Shape.cpp Square.cpp Circle.cpp
LOCAL_CPP_FEATURES += rtti
//LOCAL_CFLAGS := -frtti -> The commented lines were tests
//LOCAL_CPP_FEATURES += exceptions
//LOCAL_CPPFLAGS += -fexceptions
include $(BUILD_SHARED_LIBRARY)
Application.mk :
//APP_CPPFLAGS += -frtti -> That was for a test but it didn't work either
APP_STL := gnustl_static
関数compareToを呼び出すために使用するJavaコードは次のとおりです(SWIGを使用してJavaラッパーを生成しました):
Square s = new Square(10);
Square s3 = new Square(10);
outputText.append("s.compareTo(s3) ? " + s.compareTo(new Comparable(Square.getCPtr(s3), false), 'c') +"\n");
s3 が正方形ではないことを意味する c++ コードに関して、結果は 4 を示します。問題は、Application.mk ファイルを変更APP_STL := gnustl_static
すると、結果が 2 になることです。APP_STL := stlport_static
誰かが私を助けることができますか?