我有一个名为 Square 的简单 C++ 类,它继承自 Comparable(具有函数 compareTo 的接口)。
这是 compareTo 方法的 C++ 实现:
int Square::compareTo(Comparable* c, char criteria) {
if (dynamic_cast<Square*>(c) != NULL) {
return 2;
}
else {
return 4;
}
}
我用 Android-ndk (r8c) 生成了 libray (.so 文件)。在下面找到 Android.mk 和 Application.mk 的代码
安卓.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)
应用程序.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");
结果显示 4,关于 c++ 代码,这意味着 s3 不是 Square。问题是,如果我在 Application.mk 文件中更改APP_STL := gnustl_static
为,结果为 2。APP_STL := stlport_static
有人能帮我吗 ?