dynamic_cast的行为与APP_STL:=gnustl_static不一样
dynamic_cast does not behave the way it should with APP_STL := gnustl_static
我有一个名为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(生成了库(.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");
结果显示4,对于c++代码,这意味着s3不是正方形。问题是,如果我在Application.mk文件中将APP_STL := gnustl_static
更改为APP_STL := stlport_static
,结果是2。
有人能帮我吗?
构造函数和dynmic_cast
是否处于不同的共享对象?如果是,传递给dlopen
的选项是什么?如果用RTLD_LOCAL
加载共享对象,则g++将认为Square
类型与在另一个中键入Square
,则dynamic_cast
将失败。
如果您没有显式调用dlopen
,那么隐式load将使用用于加载共享对象的标志需要您的共享对象。当Java加载共享对象时使用RTLD_LOCAL
,这意味着任何其他共享对象由该共享对象隐式加载的也将使用CCD_ 11。在我们的案例中,我们创建了一个小型前端共享对象,除了加载所有共享我们需要的对象,按依赖关系确定的顺序,这样就不会有隐含的负载,我们可以控制绝对是CCD_ 12的论据。我们通过推导从调用到我们库中的所有Java类一个包含类似的公共基类
// In the Java base class...
private static native void initializeLibrary();
static
{
System.loadLibrary("WrapperLibrary");
initializeLibrary();
}
initializeLibrary()
函数随后执行显式dlopen
。
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- 如何处理 c++ 中类实现中的"invalid use of non-static data member"?
- 收到错误"invalid use of non-static data member 'stu::n' "
- LNK1104:无法打开libpjproject-i386-Win32-vc14-Debug-Static.lib
- 我应该在 C++ 中何时/为什么使用 STATIC?
- 在VS2019项目中集成ImageMagick:x64-windows-static library
- 如何处理Boost Spirit X3导致Visual Studio 2019 "static initialization order fiasco"?
- "static char __ = []() -> char"的含义
- 当初始值设定项是基类名时'initializer does not name a non-static data member or base class'错误
- 无法在 DLL 中链接 SDL2-static.lib
- 如何摆脱C++中未解析的外部符号"private: static char"错误?
- C++线程"Call to non-static member function without an object argument"
- 出现这种错误的原因是什么"invalid use of non-static data member "
- static是如何使用ClassA::m_variable处理所有类对象的
- LNK2001:未解析的外部符号public:static类std::vector
- 使用-static libstdc++时std::线程弱,因此在运行时会导致崩溃
- 你能初始化unique_ptrs "static const vectors"吗?(C++17 与 GCC 7.3)
- 为什么异常不适用于 OSX 上的 gcc7 和 -static-libgcc?
- 数组在 C++ 中不使用 static in 函数时不会修改
- 错误 LNK2001:未解析的外部符号"private: static class Game Game::game_"