2012-03-30 1 views
0

Не могли бы вы помочь мне с проблемой ниже? Я пробовал 3 дня без успеха.Проблема с использованием последовательной сериализации

Проблема связана с моим кодом сериализации. Всякий раз, когда я пытаюсь создать сериализацию, я сталкиваюсь с этой ошибкой.

Can't load '/home/scratch.bipham_ctg100/generic_dev/scripts/x86_64-linux/auto/nDB/nDB.so' for module nDB: /home/scratch.bipham_ctg100/generic_dev/scripts/x86_64-linux/auto/nDB/nDB.so: undefined symbol: _ZTIN5boost7archive17archive_exceptionE at ... 

Ниже приведен код, который я написал

// nDB CONSTRUCTOR 
    //********************** 
    nDB::nDB() { 
     //_LAYERS = new boost::unordered_map<string,layer,myhash,cmp_str>; 
    } 

    // nDB DESTRUCTOR 
    //********************** 
    nDB::~nDB() {} 

    // nDB METHODS 
    //********************** 

    //=============================================================== 
    // SERIALIZATION DEFINITION AND INITIALIZATION 

    template<class Archive> 
    void nDB::serialize(Archive &ar, const unsigned int version) { 
     boost::unordered_map<string,macro*,myhash,cmp_str>::const_iterator _ITER; 
     for (_ITER = _MACROS.begin();_ITER != _MACROS.end();_ITER++) { 
      ar & _ITER->first; 
      ar & *(_ITER->second); 
     } 
    } 
    //template void nDB::serialize<boost::archive::binary_oarchive>(
    // boost::archive::binary_oarchive & ar, 
    // const unsigned int version 
    //); 
    //template void nDB::serialize<boost::archive::binary_iarchive>(
    // boost::archive::binary_iarchive & ar, 
    // const unsigned int version 
    //); 
    //================================================================ 

    void nDB::save_macros(string filename) { 
     std::ofstream ofs(filename.c_str(), std::ios::out | std::ios::binary); 
     boost::archive::binary_oarchive oa(ofs); 
     oa << *this; 
    } 

ответ

0

Вы должны связать с библиотекой подталкивание сериализации. Попробуйте добавить -lboost_serialization к флагам компоновщика.

+0

Спасибо, Шон. Я сделал то, что вы предлагали, и эта ошибка исчезла, но другая неопределенная поверхность символов. Теперь это символ для boost :: archive :: detail :: basic_oserializer, который не определен. Не могли бы вы объяснить мне, как работает этот процесс связывания? Я действительно ценю твою помощь. Я потратил 3 дня на это, и это действительно расстраивает. –

+0

@Binh: Это большая задача. Я начну с поиска компоновщика, динамического компоновщика и библиотеки (вычислений) в Википедии. Это должно дать вам хороший обзор того, что делает компоновщик, и почему вам нужно связать его с библиотекой сериализации boost. Неопределенная ошибка символа указывает, что компоновщик не может найти этот символ в любом из объектных файлов или в любой из библиотек, которые, как ему сказали, должны были включать. Одна из возможных причин этого может заключаться в том, что если у вас установлено более одной версии установленной библиотеки, компоновщик может ссылаться на неверный. – Sean

+0

Спасибо, Шон, я очень ценю это. Я сделаю то, что вы предложили. –