【发布时间】:2012-06-30 20:45:48
【问题描述】:
我为 Android 开发了一些本机库并使用 Boost 库 - 只是基于标头的库。我面临的问题是,当我尝试将我的一些本机库与一些系统库链接时,UnsatisfiedLinkError 被抛出。这是由于 NDK 文档中所述的不同 C++ 运行时所致:
您只能选择一个 C++ 运行时,您的所有代码都将 取决于。不能混合针对编译的共享库 不同的 C++ 运行时。
系统库不使用 RTTI 和异常,但我的库隐式使用它。
我知道有宏 BOOST_EXCEPTION_DISABLE 和 BOOST_NO_RTTI,但我无法让它工作。我尝试将它们设置为编译器标志和 config.hpp,但没有运气 - 仍然遇到很多错误,例如
cannot use typeid with -fno-rtti
如何在 Boost 中禁用这些功能,甚至可能吗?
【问题讨论】:
-
您在尝试编译 Boost 时是否遇到该错误?或者尝试编译自己的代码时?
-
尝试编译我自己的代码时。
-
Boost 并不完美,你知道的。您是否在
typeid的标记用途处检查了源代码,以查看该代码是否包含在#ifndef BOOST_NO_RTTI中?或者也许是另一个宏?这可能是开发人员的一个简单遗漏,因为我认为禁用 rtti 并不是最常见的事情,并且可能永远不会被报告为错误。如果有禁用 RTTI 和异常的标志,那么如果它们不起作用,那就是 Boost 中的一个错误。 -
我在谷歌上搜索了很多,似乎不可能。我已经放弃并重写了我的代码。我在桌面开发中使用 Boost 多年,并没有预料到 Android 会出现任何问题——这是我的错。它太健壮了,不适合嵌入式开发……;至少如果您需要与系统库链接,否则它可以正常工作。
-
@vitakot - 您确实意识到,如果您提供的唯一信息是您有一些未指定的链接器错误,那么您将得到的最佳答案是,“糟糕的是你,希望你能想到出来。”听起来您已经有了一般性的答案,但遇到了具体的问题,但您没有提供具体的错误消息或具体的、可重复的步骤。也就是说,您提到您使用的是仅标头库,但您还使用了升压信号(不是信号2)。信号已编译,或者是我上次检查的。
标签: c++ boost android-ndk