C++ 从Boost::进程间删除RTTI

C++ 从Boost::进程间删除RTTI,c++,boost,interprocess,inter-process-communicat,C++,Boost,Interprocess,Inter Process Communicat,我正在尝试使用Boost::Interprocess实现共享内存。然而,我的程序也需要使用LLVM,LLVM需要fno rtti,而Boost::Interprocess需要rtti。具体来说,我尝试了第一个示例,但发现编译错误: /usr/include/boost/interprocess/detail/in_place_interface.hpp:50:71:错误:无法将typeid与-fno rtti一起使用 :in_place_接口(::boost::alignment_of::val

我正在尝试使用Boost::Interprocess实现共享内存。然而,我的程序也需要使用LLVM,LLVM需要fno rtti,而Boost::Interprocess需要rtti。具体来说,我尝试了第一个示例,但发现编译错误:

/usr/include/boost/interprocess/detail/in_place_interface.hpp:50:71:错误:无法将typeid与-fno rtti一起使用 :in_place_接口(::boost::alignment_of::value,sizeof(T),typeid(T).name())

我的解决方案是浏览Boost::进程间标题,并将每个
typeid().name()
替换为字符串常量
“sometype”
。该示例现在编译并运行良好(据我所知)。我不太了解的印象是Boost::Interprocess使用类型名对映射进行索引,作为加速查找的优化。在我不太了解的印象中,将所有类型名更改为常量将导致性能下降,但不会影响正确性

如果我不从Boost::Interprocess中删除RTTI,我将被迫使用其他一些进程间库,因为混合使用RTTI和不使用RTTI并不会给我带来很多希望


这是通过用常量字符串替换
typeid
来替换Boost::进程间头中的RTTI,对吗?我担心不正确的行为,比如Boost使用typeid来确定调用哪个析构函数,或者其他类似的问题。我在一个单一开发人员、单一用途的虚拟机上。

我也有同样的问题。最后,我用LLVM_ENABLE_RTTI=ON重新编译LLVM来解决这个问题。

为什么
LLVM需要fno RTTI,