boost::archive::binary_ostream linker errors



  • Hi
    Ich schaue mir gerade die Serialization Lib von boost an und komm da auch an den Archiven nicht vorbei.
    Und da kommen Linkererrors in Spiel(Visual C++ 2008) und zwar wie folgt:

    Linking...
    1>Main.obj : error LNK2019: unresolved external symbol "protected: __thiscall boost::archive::basic_binary_oprimitive<class boost::archive::binary_oarchive,char,struct std::char_traits<char> >::~basic_binary_oprimitive<class boost::archive::binary_oarchive,char,struct std::char_traits<char> >(void)" (??1?basic_binary_oprimitive@Vbinary_oarchive@archive@boost@@DU?basic\_binary\_oprimitive@Vbinary\_oarchive@archive@boost@@DU?char_traits@D@std@@@archive@boost@@IAE@XZ) referenced in function "public: __thiscall boost::archive::binary_oarchive_impl<class boost::archive::binary_oarchive,char,struct std::char_traits<char> >::~binary_oarchive_impl<class boost::archive::binary_oarchive,char,struct std::char_traits<char> >(void)" (??1?binary_oarchive_impl@Vbinary_oarchive@archive@boost@@DU?binary\_oarchive\_impl@Vbinary\_oarchive@archive@boost@@DU?char_traits@D@std@@@archive@boost@@QAE@XZ)
    1>Main.obj : error LNK2019: unresolved external symbol "protected: __thiscall boost::archive::basic_binary_oprimitive<class boost::archive::binary_oarchive,char,struct std::char_traits<char> >::basic_binary_oprimitive<class boost::archive::binary_oarchive,char,struct std::char_traits<char> >(class std::basic_streambuf<char,struct std::char_traits<char> > &,bool)" (??0?basic_binary_oprimitive@Vbinary_oarchive@archive@boost@@DU?basic\_binary\_oprimitive@Vbinary\_oarchive@archive@boost@@DU?char_traits@D@std@@@archive@boost@@IAE@AAV?basic_streambuf@DU?basic\_streambuf@DU?char_traits@D@std@@@std@@_N@Z) referenced in function "protected: __thiscall boost::archive::binary_oarchive_impl<class boost::archive::binary_oarchive,char,struct std::char_traits<char> >::binary_oarchive_impl<class boost::archive::binary_oarchive,char,struct std::char_traits<char> >(class std::basic_ostream<char,struct std::char_traits<char> > &,unsigned int)" (??0?binary_oarchive_impl@Vbinary_oarchive@archive@boost@@DU?binary\_oarchive\_impl@Vbinary\_oarchive@archive@boost@@DU?char_traits@D@std@@@archive@boost@@IAE@AAV?basic_ostream@DU?basic\_ostream@DU?char_traits@D@std@@@std@@I@Z)
    1>Main.obj : error LNK2019: unresolved external symbol "protected: void __thiscall boost::archive::basic_binary_oprimitive<class boost::archive::binary_oarchive,char,struct std::char_traits<char> >::init(void)" (?init@?basic_binary_oprimitive@Vbinary_oarchive@archive@boost@@DU?basic\_binary\_oprimitive@Vbinary\_oarchive@archive@boost@@DU?char_traits@D@std@@@archive@boost@@IAEXXZ) referenced in function "protected: void __thiscall boost::archive::binary_oarchive_impl<class boost::archive::binary_oarchive,char,struct std::char_traits<char> >::init(unsigned int)" (?init@?binary_oarchive_impl@Vbinary_oarchive@archive@boost@@DU?binary\_oarchive\_impl@Vbinary\_oarchive@archive@boost@@DU?char_traits@D@std@@@archive@boost@@IAEXI@Z)
    1>Main.obj : error LNK2019: unresolved external symbol "protected: void __thiscall boost::archive::basic_binary_oprimitive<class boost::archive::binary_oarchive,char,struct std::char_traits<char> >::save(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?save@?basic_binary_oprimitive@Vbinary_oarchive@archive@boost@@DU?basic\_binary\_oprimitive@Vbinary\_oarchive@archive@boost@@DU?char_traits@D@std@@@archive@boost@@IAEXABV?basic_string@DU?basic\_string@DU?char_traits@D@std@@V?allocator@D@2@@std@@@Z) referenced in function "public: static void \_\_cdecl boost::archive::save\_access::save\_primitive,class std::allocator > >(class boost::archive::binary\_oarchive &,class std::basic\_string,class std::allocator > const &)" (??save_primitive@Vbinary_oarchive@archive@boost@@V?basic_string@DU?basic\_string@DU?char_traits@D@std@@V?allocator@D@2@@std@@@save_access@archive@boost@@SAXAAVbinary_oarchive@12@ABV?allocator@D@2@@std@@@save\_access@archive@boost@@SAXAAVbinary\_oarchive@12@ABV?basic_string@DU?char_traits@D@std@@V?char\_traits@D@std@@V?allocator@D@2@@std@@@Z)
    1>C:\Dokumente und Einstellungen\Quick\Eigene Dateien\Visual Studio 2008\Projects\ThereAreAlwaysNewThings2\Debug\ThereAreAlwaysNewThings2.exe : fatal error LNK1120: 4 unresolved externals
    1>Build log was saved at "file://c:\Dokumente und Einstellungen\Quick\Eigene Dateien\Visual Studio 2008\Projects\ThereAreAlwaysNewThings2\ThereAreAlwaysNewThings2\Debug\BuildLog.htm"
    1>ThereAreAlwaysNewThings2 - 5 error(s), 2 warning(s)

    Das finde ich relativ seltsam, weil ich weder was finden könnte, was ich linken kann, noch irgendwo die Notwendigkeit dazu beschrieben wird, und bevor ichs vergesse, das weswegen er sich da beschwert ist boost::archive::binary_oarchive
    oder auch in Codeform:

    #include <fstream>
    #include <boost/serialization/serialization.hpp>
    #include <boost/archive/binary_oarchive.hpp>
    #include <boost/archive/binary_iarchive.hpp>
    
    class SerializationTest
      {
      public:
        int a;
        template <class Archive>
        void Serialize(Archive& archive, int version = 0)
          {
          archive & a;
          }
      };
    void save()
      {
      SerializationTest test;
      test.a = 3;
      std::ofstream file ("C:\\test.dataX", std::ios::binary);
      boost::archive::binary_oarchive archive(file);
      }
    int main()
      {
      save();
    
      }
    


  • Hat sich erledigt, ich verzichte auf Boost Serialization und schreibe lieber eigene Methoden, das dauert zwar ein bisschen länger, aber desto weniger von dem Boostscheiß drin ist, desto besser.



  • Zur vervollständigung:

    The only Boost libraries that must be built separately are:

    Boost.Filesystem
    Boost.IOStreams
    Boost.ProgramOptions
    Boost.Python (see the Boost.Python build documentation before building and installing it)
    Boost.Regex
    Boost.Serialization
    Boost.Signals
    Boost.Thread
    Boost.Wave



  • Serialization hatte ich auch gelinkt...



  • Hat übrigens geklappt als ich ipp Dateien einmal inkludiert habe, hat wohl das selbe bewirkt wie irgend ne fehlende Lib.
    Aber das ist wieder so ne typische Boost Lib, schwer zu verstehen, egal ob man nun die Doku oder den Code liest und letzten Endes, wenn man se dann verstanden hat, bringt se doch nix, weil se net das kann was ich von ner Serialisierung erwarte...
    Da kann ichs auch gleich manuell in die Dateien schreiben, is nicht wirklich aufwendiger.


Anmelden zum Antworten