为_ZTVN10__cxxabiv ### symbols

时间:2016-02-17 01:43:41

标签: android-ndk

这三个符号是: _ZTVN10__cxxabiv120__si_class_type_infoE _ZTVN10__cxxabiv117__class_type_infoE _ZTVN10__cxxabiv121__vmi_class_type_infoE

我的项目是一个包含53个源文件的多平台C ++项目,此时可能超过100个类,所以我不能真正发布一个例子......如果我知道问题是什么我不需要到这里。尝试加载.so我编译会导致java.lang.UnsatisfiedLinkError出现这三个错误。 (它实际上只显示一个,所以我在发布之前就把它们弄掉了,所以我知道所有的错误)

我正在为android-9编译。

我曾经在1.6天内与NDK合作过,我以前可能曾经遇到过这个问题,但是我已经离它3年了,因此我有点生疏了。我知道NDK有一些奇怪的怪癖,例如如果你有一个类的静态非指针实例,就无法链接。 (在旧的NDK版本中,这会在运行时失败,并且出现不合情理的__dso_handle错误)我已经仔细检查了所有代码,以确保在库加载时不会执行任何静态代码,因此这不是问题。

那就是说,我现在处于亏损状态。网络搜索显示,在使用GCC而不是G ++编译CPP文件时,其他平台存在问题,所以我改变了......没有改进。另一个网站表明它与vtable相关,但没有我真正知道如何使用的信息。我无法确定哪些类导致了这个问题,因为很多类都相互依赖。

我唯一可以做的就是问这里是否有其他人遇到过这个问题以及一般的编码方法会导致什么问题?

编辑:不妨包括使用的cflags,lflags和程序:

  • cflags : - c -DPLATFORM_ANDROID -DANDROID -march = armv5te -std = c99 -mtune = xscale -g -O0 -msoft-float -mthumb-interwork -fpic -ffunction-sections -fno -unwind-tables -fno-exceptions -fstack-protector -fno-short-enums -w -Wno-psabi
  • lflags :-lm -lc -lstdc ++ -llog -lz -ldl -lGLESv1_CM -g -O0 -nostdlib -shared -olibsomename.so
  • gcc dir :androidndkr10d \ toolchains \ arm-linux-androideabi-4.9 \ prebuilt \ windows-x86_64 \ bin
  • 编译器:arm-linux-androideabi-gcc(c)/ arm-linux-androideabi -g ++(cpp)
  • 链接器:arm-linux-androideabi-ld

1 个答案:

答案 0 :(得分:2)

在发布此消息后发现它与RTTI相关。使用-fno-rtti似乎是一个合法的修复,在修复端口半天左右后没有明显的副作用。