Boost进程间发送给定错误:Boost::进程间异常::库错误

Boost进程间发送给定错误:Boost::进程间异常::库错误,boost,boost-serialization,boost-interprocess,Boost,Boost Serialization,Boost Interprocess,我使用boost消息队列在不同进程之间进行通信。我正在传输一个数据包类型的对象。为此,我在发送和接收函数中使用序列化和反序列化 但是,当我尝试发送数据时,我收到以下错误: boost::进程间异常::库错误 没有提供其他信息 这就是我创建消息队列的方式 for(i = 0; i< PROC_MAX_E ; i++){ std::string mqName = std::string("mq") + std::to_string(i); std::cout

我使用boost消息队列在不同进程之间进行通信。我正在传输一个数据包类型的对象。为此,我在发送和接收函数中使用序列化和反序列化

但是,当我尝试发送数据时,我收到以下错误: boost::进程间异常::库错误

没有提供其他信息

这就是我创建消息队列的方式

 for(i = 0; i< PROC_MAX_E ; i++){
        std::string mqName = std::string("mq") + std::to_string(i);
        std::cout << " Size of Packet is " << sizeof(Packet) << std::endl;
        message_queue mq(open_or_create, mqName.c_str(), MAX_QUEUE_SIZE_E, 100*sizeof(Packet)); // size of packet later
      }
这是我的包:

 class Packet{
    public :
    Packet();
    Packet(uint32_t aType, uint32_t aProcId);
    ~Packet();
    uint32_t getType();
    union{
      uint32_t  mFuncId;
      //uint8_t   mResult8;
      uint32_t  mResult32;
      //uint64_t  mResult64;
      //bool      mResult;
      //uint8_t*  mAddr8;
      //uint32_t* mAddr32;
      //uint64_t* mAddr64;
      //char      mData[MAX_PACKET_SIZE]; // This will be used to store serialized data
    };

    friend class boost::serialization::access;

    template <class Archive>
    void serialize(Archive & ar, const unsigned int version){
      ar & _mType;
      ar & _mProcId;
      //ar & mData;
      ar & mFuncId;
      //ar & mResult32;
      }


    private :
    uint32_t _mType;
    uint32_t _mProcId;


  }; // end class

} // end namespace
这是我的序列化和反序列化函数:

std::string IPC::_serialize(Packet aPacket){
    std::stringstream oss;
    boost::archive::text_oarchive oa(oss);
    oa << aPacket;
    std::string serialized_string (oss.str());
    return serialized_string;

  }



  Packet IPC::_deserialize(std::string aData){
    Packet p;
    std::stringstream iss;
    iss << aData;
    boost::archive::text_iarchive ia(iss);
    ia >>  p;
    return p;
  }
bool IPC::send(uint32_t aProcId, Packet aPacket){
    try{
        _mLogFile << "<-- Sending Data to Process : " << aProcId << std::endl;
        //uint32_t data = aPacket;
        std::string mqName = std::string("mq") + std::to_string(aProcId);
        message_queue mq(open_only, mqName.c_str());
        //serialize Packet
        std::cout << "Serializing \n";
        std::string data = _serialize(aPacket);
        std::cout << " Serialized data =" << data.data() << "Size = " << data.size()<< std::endl;
        mq.send(data.data(), data.size(), 0);
        //mq.send(&data, sizeof(uint32_t), 0);
    }catch(interprocess_exception &ex){
        _mLogFile << "***ERROR*** in IPC Send to process : " << aProcId << " " << ex.what() << std::endl;
        std::cout << "***ERROR*** in IPC Send to process : " << aProcId << " " << ex.what() << std::endl;
        _ipc_exit();
    }
  }
这是我的发送和接收功能:

std::string IPC::_serialize(Packet aPacket){
    std::stringstream oss;
    boost::archive::text_oarchive oa(oss);
    oa << aPacket;
    std::string serialized_string (oss.str());
    return serialized_string;

  }



  Packet IPC::_deserialize(std::string aData){
    Packet p;
    std::stringstream iss;
    iss << aData;
    boost::archive::text_iarchive ia(iss);
    ia >>  p;
    return p;
  }
bool IPC::send(uint32_t aProcId, Packet aPacket){
    try{
        _mLogFile << "<-- Sending Data to Process : " << aProcId << std::endl;
        //uint32_t data = aPacket;
        std::string mqName = std::string("mq") + std::to_string(aProcId);
        message_queue mq(open_only, mqName.c_str());
        //serialize Packet
        std::cout << "Serializing \n";
        std::string data = _serialize(aPacket);
        std::cout << " Serialized data =" << data.data() << "Size = " << data.size()<< std::endl;
        mq.send(data.data(), data.size(), 0);
        //mq.send(&data, sizeof(uint32_t), 0);
    }catch(interprocess_exception &ex){
        _mLogFile << "***ERROR*** in IPC Send to process : " << aProcId << " " << ex.what() << std::endl;
        std::cout << "***ERROR*** in IPC Send to process : " << aProcId << " " << ex.what() << std::endl;
        _ipc_exit();
    }
  }
我在mq.send期间遇到异常

当我只传输整数时,它工作正常。只有通过序列化和反序列化,我才能得到这个错误

非常感谢您的帮助。我有点卡住了,因为异常信息也不清楚。 我正在使用boost 1_57_0

Rgds
使用管柱前,尝试关闭或冲洗管柱蒸汽

std::string IPC::_serialize(Packet aPacket){
    std::stringstream oss; 
    {
        boost::archive::text_oarchive oa(oss);
        oa << aPacket;
    }
    return oss.str();
}

你试过调试吗?在gdb中,接球投掷有帮助。另外,在反序列化函数体周围添加错误处理,我不确定它们是否被使用。特别是,捕获存档异常。捕获点3异常抛出,uu cxxabiv1::uu cxa_throw obj=0x625770,tinfo=0x416c90,dest=0x4077a2 at../../../../../../../../../../src/lnx64/libstdc++-v3/libsupc++/eh_-throw.cc:71../../../../../../../src/lnx64/libstdc++-v3/libsupc++/eh_-throw.cc:没有这样的文件或目录。只需补充一点,在执行mq.send函数时会出现异常,您是否。。。。尝试查看那里的堆栈bt?进行了一些调试并重新排列了一些代码,我可以看到错误出现在oa行,这也没有帮助。我在gdb中添加了catch-throw,得到了上面的异常。不知道这个例外意味着什么