2012-03-30 16 views
0

Würden Sie mir bitte mit dem unten stehenden Problem helfen? Ich habe 3 Tage ohne Erfolg versucht.Problem mit Boost-Serialisierung

Das Problem ist mit meinem Serialisierungscode. Immer wenn ich versuche, die Serialisierung zu instanziieren, stoße ich auf diesen Fehler.

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 ... 

Unten finden Sie den Code I

schrieb
// 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; 
    } 

Antwort

0

Sie müssen gegen die Boost-Serialisierung Bibliothek verknüpfen. Fügen Sie Ihren Linker-Flags -lboost_serialization hinzu.

+0

Danke Sean. Ich habe getan, was Sie vorgeschlagen haben und dieser Fehler verschwindet aber eine andere undefinierte Symboloberfläche. Es ist jetzt das Symbol für boost :: archive :: detail :: basic_oserializer, das nicht definiert ist. Würdest du mir bitte beibringen, wie dieser Linking-Prozess funktioniert? Ich schätze deine Hilfe sehr. Ich habe 3 Tage damit verbracht und es ist wirklich frustrierend. –

+0

@Binh: Das ist eine große Aufgabe. Ich würde mit Linker, Dynamic Linker und Bibliothek (Computing) auf Wikipedia nachschlagen. Dies sollte Ihnen einen guten Überblick darüber geben, was ein Linker tut und warum Sie eine Verbindung zur Boost-Serialisierungsbibliothek herstellen müssen. Ihr undefinierter Symbolfehler zeigt an, dass der Linker das Symbol in keiner der Objektdateien oder in den Bibliotheken finden kann, die es enthalten soll. Eine mögliche Ursache dafür könnte sein, dass wenn Sie mehr als eine Version der Bibliothek installiert haben, der Linker mit der falschen verlinkt. – Sean

+0

Dank Sean, ich schätze es wirklich. Ich werde tun, was Sie vorgeschlagen haben. –