3

我创建了一个使用 RTTI 支持 dynamic_cast 的应用程序。我在 Application.mk 文件中添加了“APP_CPPFLAGS += -frtti”,但出现错误:“未定义对 `vtable for ... 的引用”。如果我不使用 RTTI,我会收到错误消息:“错误:'dynamic_cast' not allowed with - fno-rtti”

我得到了输出:

    ./obj/local/armeabi-v7a/objs/vnptsofthsm/VNPTCASoftHSM/botan_impl/global_rng.o: In function `~RandomNumberGenerator':
    D:\Duongpd\Token\TMS\vnpt.example.TestSoftHSM/jni/VNPTCASoftHSM/botan_impl/../botan/../botan/rng.h:90: undefined reference to `vtable for Botan::RandomNumberGenerator'
    D:\Duongpd\Token\TMS\vnpt.example.TestSoftHSM/jni/VNPTCASoftHSM/botan_impl/../botan/../botan/rng.h:90: undefined reference to `vtable for Botan::RandomNumberGenerator'
    D:\Duongpd\Token\TMS\vnpt.example.TestSoftHSM/jni/VNPTCASoftHSM/botan_impl/../botan/../botan/rng.h:90: undefined reference to `vtable for Botan::RandomNumberGenerator'
    D:\Duongpd\Token\TMS\vnpt.example.TestSoftHSM/jni/VNPTCASoftHSM/botan_impl/../botan/../botan/rng.h:90: undefined reference to `vtable for Botan::RandomNumberGenerator'
   ./obj/local/armeabi-v7a/objs/vnptsofthsm/VNPTCASoftHSM/botan_impl/global_rng.o:(.data.rel.ro+0x8): undefined reference to `typeinfo for Botan::RandomNumberGenerator'

这是 Botan::RandomNumberGenerator :

class RandomNumberGenerator
   {
   public:

      static RandomNumberGenerator* make_rng();

      virtual void randomize(byte output[], size_t length) = 0;

      SecureVector<byte> random_vec(size_t bytes)
         {
         SecureVector<byte> output(bytes);
         randomize(&output[0], output.size());
         return output;
         }

      byte next_byte();

      virtual bool is_seeded() const { return true; }

      virtual void clear() = 0;

      virtual std::string name() const = 0;

      virtual void reseed(size_t bits_to_collect) = 0;

      virtual void add_entropy_source(EntropySource* source) = 0;

      virtual void add_entropy(const byte in[], size_t length) = 0;

      RandomNumberGenerator() {}
      virtual ~RandomNumberGenerator() {}
   private:
      RandomNumberGenerator(const RandomNumberGenerator&) {}
      RandomNumberGenerator& operator=(const RandomNumberGenerator&)
         { return (*this); }
   };

我的应用程序.mk:

APP_STL := gnustl_static
APP_CPPFLAGS += -fexceptions
APP_CPPFLAGS += -frtti
APP_CPPFLAGS += -DANDROID
APP_ABI := armeabi-v7a

你能帮我吗?

4

1 回答 1

0

在这里,人们成功地为 Android 构建了植物库。请注意,他们使用的是较旧的 NDK,根本没有rtti选项。很可能,您也不需要它。

于 2012-10-10T08:40:39.853 回答