8

我为 Android 开发了一些本机库并使用 Boost 库——只是基于标头的库。我面临的问题是,当我尝试将我的一些本机库链接到某个系统库时,UnsatisfiedLinkError会抛出异常。这是由于 NDK 文档中所述的不同 C++ 运行时:

您只能选择所有代码都依赖的单个 C++ 运行时。不能混合针对不同 C++ 运行时编译的共享库。

系统库不使用 RTTI 和异常,但我的库隐式使用它。我知道有宏BOOST_EXCEPTION_DISABLEBOOST_NO_RTTI,但我无法使其工作。我尝试将它们设置为编译器标志和 config.hpp,但没有运气 - 仍然遇到很多错误,例如

cannot use typeid with -fno-rtti

如何在 Boost 中禁用这些功能,甚至可能吗?

4

1 回答 1

5

答案是“也许”。一些 boost 库将在禁用异常的情况下工作 - 有些则不会。RTTI 也一样。

我建议您查看您感兴趣的特定 boost 库的文档。

例如,Boost.Array 将在禁用异常的情况下工作,但 Boost.Format 不会。

如果您收到类似的消息cannot use typeid with -fno-rtti,那可能是在编译需要 RTTI 的 Boost 的某些部分时。发生错误的位置会告诉您(通常)是哪个库。

于 2012-07-01T03:46:05.013 回答