我在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
首先,请注意,当队列打开时,您不应该
队列。假设,为了这个答案,您实际上并没有在实际代码中执行此操作,并且在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
并且您将可以在引发异常时获得回溯。
如果这没有帮助,请考虑检查所需的操作系统支持,并排除权限问题。