Я встретил вопрос при использовании boost :: serialization, мой код прекрасно работает в Linux, но встретил исключение в Windows

Я пытаюсь сохранить построение карты с помощью ORB-SLAM с использованием boost, код отлично работает в linux, но когда я перемещаю его в windows, я встречал исключение при загрузке данных. Ниже часть моего кода, это большой проект, поэтому я просто показываю соответствующий код. Пожалуйста, помогите мне!

Часть кода в .h

    friend class boost::serialization::access;

template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
boost::serialization::split_member(ar, *this, version);
}

template<class Archive>
void save(Archive & ar, const unsigned int version) const;template<class Archive>
void load(Archive & ar, const unsigned int version);

Профиль CPP

        template<class Archive>
void Map::load(Archive & ar, const unsigned int version)
{
unsigned int test_data;

int nItems;
ar & nItems;
cout << "{INFO}mspMapPoints size = " << nItems << endl;

for (int i = 0; i < nItems; ++i) {

MapPoint* pMapPoint = new MapPoint();
ar & *pMapPoint;
mspMapPoints.insert(pMapPoint);
}

ar & nItems;
cout << "{INFO}mspKeyFrames size = " << nItems << endl;

for (int i = 0; i < nItems; ++i) {

KeyFrame* pKeyFrame = new KeyFrame;
ar & *pKeyFrame;
mspKeyFrames.insert(pKeyFrame);
}ar & nItems;
cout << "{INFO}mvpKeyFrameOrigins size = " << nItems << endl;

for (int i = 0; i < nItems; ++i) {

KeyFrame* pKeyFrame = new KeyFrame;
ar & *pKeyFrame;
/* TODO : VerifyHere*/
mvpKeyFrameOrigins.push_back(*mspKeyFrames.begin());
}

ar & const_cast<long unsigned int &> (mnMaxKFid);

ar & test_data;
if (test_data == TEST_DATA)
cout <<">>Map Loading Validated as True" << endl;
else
cout <<"ERROR Map Loading Validated as False: Got -" << test_data << " :( Check Load Save sequence" << endl;

}

Функция вызова выглядит следующим образом:

void System::LoadMap(const string &filename)
{
{
std::ifstream is(filename,std::ios::binary);boost::archive::binary_iarchive ia(is, boost::archive::no_header);
//ia >> mpKeyFrameDatabase;
ia >> mpMap;

}

cout << endl << filename <<" : Map Loaded!" << endl;}
void System::SaveMap(const string &filename)
{
std::ofstream os(filename,std::ios::binary);
{
boost::archive::binary_oarchive oa(os, boost::archive::no_header);
//oa << mpKeyFrameDatabase;
oa << mpMap;
}
cout << endl << "Map saved to " << filename << endl;

}

Это нормально и для сохранения, и для загрузки в Linux, но загрузка просто вызовет проблему boost :: archive :: archive_exception, не сообщив мне никаких подробностей.

1

Решение

Вы должны показать только соответствующий код. В частности, он должен показать ваш выбор архива. Кроме того, вы никогда не говорили нам / что / не работает, но я предполагаю, что вы загружаете архив, сохраненный на стороне Linux на стороне Windows?

Формат двоичного архива не является переносимым. Так что во что бы то ни стало, избегайте этого или используйте замену dropin, которая пытается быть переносимой: https://github.com/mika-fischer/eos-portable-archive

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]