【问题标题】:Problem creating a circular buffer in shared memory using Boost使用 Boost 在共享内存中创建循环缓冲区时出现问题
【发布时间】:2010-02-25 04:21:43
【问题描述】:

我正在尝试使用 Boost circular_buffer 和进程间库在共享内存中创建一个循环缓冲区。我编译并运行了Interprocess documentation 中给出的示例,以毫无问题地在共享内存中创建向量。但是,当我修改它以使用 Boost circular_buffer 作为:

int main(int argc, char *argv[])
{
    managed_shared_memory segment(create_only, "MySharedMemory", 65536);
    const ShmemAllocator alloc_inst (segment.get_segment_manager());
    MyCircBuffer  *myCircBuf  = segment.construct<MyCircBuffer>("MyCircBuffer")(alloc_inst);
    return 0;
} 

我收到一个编译错误(由segment.construct() 引起)。知道我做错了什么吗?是不是因为circular_buffer 不是/boost/interprocess/containers 中列出的容器之一,即它与Interprocess 不兼容?

谢谢,

C

【问题讨论】:

  • 能否提供编译错误信息?
  • 请贴出错误列表和编译器...
  • 很抱歉没有提供所有细节。我得到的错误是 /usr/local/include/boost/circular_buffer/base.hpp:2127: error: cannot convert 'boost::interprocess::offset_ptr' to 'void*' for argument '1' to ' void* memset(void*, int, size_t)' 我在 MAC OS X 上使用 gcc v4.2.1

标签: c++ boost-interprocess circular-buffer


【解决方案1】:

我在 boost 用户论坛上问了同样的问题,建议的解决方案是使用 -DBOOST_CB_DISABLE_DEBUG 或 -DNDEBUG 标志,因为 circular_buffer 依赖于原始指针来提供调试支持。

还有其他建议吗?

【讨论】:

    猜你喜欢
    • 2014-04-22
    • 2018-06-08
    • 1970-01-01
    • 1970-01-01
    • 2019-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多