我为Android开发了一些本地库,并使用Boost库 - 只是基于头文件库。我面临的问题是,当我尝试将一些本机库与某个系统库链接时,会抛出UnsatisfiedLinkError
。这是由于NDK文档中所述的不同C ++运行时:
您只能选择所有代码都将使用的单个C ++运行时 取决于。混合使用的共享库是不可能的 不同的C ++运行时。
系统库不使用RTTI和Exceptions,但我的库隐式使用它。
我知道有BOOST_EXCEPTION_DISABLE
和BOOST_NO_RTTI
宏,但我无法使其正常工作。我试图将它们设置为编译器标志,并在config.hpp中,但没有运气 - 仍然会收到很多错误,如
cannot use typeid with -fno-rtti
如何在Boost中禁用这些功能,是否可能?
答案 0 :(得分:5)
答案是“也许”。 一些boost库可以在禁用异常时使用 - 有些则不会。 同样适用于RTTI。
我建议您查看您感兴趣的特定boost库的文档。
例如,Boost.Array将禁用异常,但Boost.Format不会。
如果您收到cannot use typeid with -fno-rtti
之类的消息,那么可能在编译需要RTTI的Boost的某些部分时。发生错误的地方会告诉你哪个库(通常)。