c++ - 从 Boost::Interprocess 中删除 RTTI

标签 c++ boost interprocess inter-process-communicat

我正在尝试将 Boost::Interprocess 用于共享内存。但是,我的程序还需要使用LLVM,而LLVM需要fno-rtti,而Boost::Interprocess需要RTTI。具体来说,我尝试了第一个例子 here ,我得到了编译错误:

/usr/include/boost/interprocess/detail/in_place_interface.hpp:50:71: error: cannot use typeid with -fno-rtti : in_place_interface(::boost::alignment_of::value, sizeof(T), typeid(T).name())

我的解决方案是浏览 Boost::Interprocess header 并将每个 typeid().name() 替换为字符串常量 "sometype"。该示例现在编译并运行良好(据我所知)。我不太了解的印象是 Boost::Interprocess 使用类型名称来索引 map ,作为 boost 查找的优化。在我不太了解的印象下,将所有类型名称更改为常量会降低性能,但不会影响正确性。

如果我不从 Boost::Interprocess 中删除 RTTI,我将被迫使用其他一些进程间库,因为 this page对于混合 RTTI 和非 RTTI,我没有太大希望。

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

最佳答案

我遇到了同样的问题。我最终通过使用 LLVM_ENABLE_RTTI=ON 重新编译 LLVM 解决了这个问题。

关于c++ - 从 Boost::Interprocess 中删除 RTTI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31736060/

相关文章:

c++ - QNetworkReply::error 信号什么时候会跟着一个 finish() 信号?

c++ - 尝试与 boost_timer 链接时出现 DSO 错误

python - 最简单的python网络消息传递

C#:读取和修改另一个应用程序的 app.config 文件中的设置

c++ - 如何创建新文件夹并将文件保存到其中?

声明字节数组时出现 C++ 语法错误

c++ - Term 不计算为采用三个参数的函数

c++ - boost::this_thread::get_id 在 exit() 调用期间不返回 id

c++ - 使用 eclipse 在项目中包含 boost 源文件

c++ - 共享内存的 boost 容器是否实现锁定?