我想在我的项目中禁用 RTTI。但是,该项目使用 Boost Program Options,它本身依赖于不支持 -fno-rtti 的 Boost Any。
我想知道是否有任何解决方案可以在没有 RTTI 的情况下使用 Boost Program?通过定义宏还是不使用某些功能?
谢谢
我想在我的项目中禁用 RTTI。但是,该项目使用 Boost Program Options,它本身依赖于不支持 -fno-rtti 的 Boost Any。
我想知道是否有任何解决方案可以在没有 RTTI 的情况下使用 Boost Program?通过定义宏还是不使用某些功能?
谢谢
答案是不”。Boost.PO 是基于 Boost.Any 的,目前用户无法避免这种依赖。Boost.Any 给出了 Boost.PO 的主要存储结构,因此如果没有 Any 就无法编译 PO 的一些有用部分。
答案是“也许”。一些 boost 库将在禁用异常的情况下工作 - 有些则不会。RTTI 也一样。
我建议您查看您感兴趣的特定 boost 库的文档。
例如,Boost.Array 将在禁用异常的情况下工作,但 Boost.Format 不会。
如果您收到无法将 typeid 与 -fno-rtti 一起使用的消息,那可能是在编译需要 RTTI 的 Boost 的某些部分时。发生错误的位置会告诉您(通常)是哪个库。
您可以尝试 BOOST_NO_RTTI 和 BOOST_NO_TYPEID ...
http://www.boost.org/doc/libs/1_46_1/libs/exception/doc/configuration_macros.html