2012-06-30 31 views
8

我为Android开发了一些本地库,并使用Boost库 - 只是基于标头的库。我面临的问题是,当我尝试将一些本机库链接到某个系统库时,引发了UnsatisfiedLinkError。这是由于随着NDK文档中所述不同的C++运行时:是否可以在Boost库中禁用异常和RTTI?

只能选择一个C++运行时,所有你的代码将 依赖。不可能混合使用针对不同C++运行时编译的共享库。

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

cannot use typeid with -fno-rtti 

我怎样才能加速禁用这些功能,是它甚至可能吗?

+2

尝试编译Boost时你遇到了那个错误吗?或者当试图编译自己的代码? –

+0

当试图编译我自己的代码。 – vitakot

+0

顺便说一下,你的问题没有意义;我写了我只使用标题...,主要是circular_buffer.hpp,signal.hpp和shared_ptr.hpp – vitakot

回答

5

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

我建议你检查的文档,你有兴趣。

例如,Boost.Array将与残疾人例外的工作特别Boost库,但Boost.Format库不会。

如果您收到类似cannot use typeid with -fno-rtti的消息,那么编译需要RTTI的Boost某些部分时可能会出现这种情况。发生错误的地方会告诉你哪个库(通常)。

+0

感谢您的回答!你可能是对的。这个消息与boost信号库有关,它也使用'boost bind',这意味着使用'boost any',如果没有启用rtti,这个功能可能是不可能的。实际上Boost应该根据编译器设置来设置它自己,所以我相信没有必要明确定义'BOOST_NO_RTTI'等。 – vitakot