如何解决Boost错误:'boost::interprocess_exception::library_error'

问题描述 投票:0回答:1

我在qnx环境中创建了message_server,总是出现“library_error”:

#include <boost/interprocess/ipc/message_queue.hpp>

int main() {
    boost::interprocess::message_queue mq(boost::interprocess::open_or_create, "my_queue", 100, 10);
    mq.remove("my_queue");
}

在日志文件中:

terminate called after throwing an instance of 'boost::interprocess::interprocess_exception'
  what():  boost::interprocess_exception::library_error
c++ boost message-queue qnx
1个回答
0
投票

首先,请注意,当队列打开时,您不应该

remove
队列。假设,为了这个答案,您实际上并没有在实际代码中执行此操作,并且在
message_queue
构造函数中引发了异常。

您应该从处理异常并找出原因开始:

try {
    boost::interprocess::message_queue mq(boost::interprocess::open_or_create, "my_queue", 100, 10);
} catch (boost::interprocess::interprocess_exception const& ex) {
    std::cout << ex.what() << std::endl;
}

但是,就您而言,该消息看起来将是

 "boost::interprocess_exception::library_error"
。遗憾的是,这意味着没有任何有用的消息(参见
exceptions.hpp
):

     else if(str){
        m_str = str;
     }
     else{
        m_str = "boost::interprocess_exception::library_error";
     }

在这种情况下,我建议连接您值得信赖的调试器,看看在什么时候出现异常。例如。在 gdb 你可以这样做:

(gdb) start
(gdb) catch throw
(gdb) run

并且您将可以在引发异常时获得回溯。

如果这没有帮助,请考虑检查所需的操作系统支持,并排除权限问题。

© www.soinside.com 2019 - 2024. All rights reserved.