未定义的参考来增强序列化功能

时间:2016-09-26 10:33:14

标签: c++ qt boost

使用boost序列化我使用序列化头文件遇到了很多错误,如下所示:

  

/home/saikumar/Downloads/boost_1_61_0/boost/archive/text_iarchive.hpp:117:错误:未定义引用`boost :: archive :: text_iarchive_impl :: text_iarchive_impl(std :: istream&amp;,unsigned int)'< / p>

我尝试了stackoverflow中的所有可能的链接(123和其他几个。)

他们说要使用LIBS += -lboost_system或其他人,但提升文档说它只是一个标题库Boost setup,这意味着它不需要任何库链接,即使我尝试搜索该库中的库提升文件夹,我找不到它。

我遵循了在升级设置过程中执行的相同步骤,但我无法找到任何东西。这是我正在测试它的代码:

#include <fstream>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/serialization/string.hpp>
#include <boost/serialization/vector.hpp>
#include <vector>

class test
{
public:

    std::vector<int> test1;
    std::string test2;

    test()
    {
    }

    test(std::vector<int> h, std::string i):test1(h), test2(i)
    {
    }
private:
    friend class boost::serialization::access;
    template<class Archive> void serialize(Archive & ar, const unsigned int version)
    {
        ar & test1;
        ar & test2;
    }
};

int main(int argc, char *argv[])
{
    test obj;

    obj.test1.push_back(1);
    obj.test1.push_back(3);
    obj.test1.push_back(6);
    obj.test1.push_back(74);
    obj.test1.push_back(43);
    obj.test1.push_back(12);
    obj.test1.push_back(8);
    obj.test1.push_back(13);

    obj.test2 ="jsahdjfkadshflkssfjdslfk";


    std::ofstream file("myfile.FILE");
    boost::archive::text_oarchive oo(file);
    oo<<obj;

    test obj1;

    std::ifstream ifs("myfile.FILE");
    boost::archive::text_iarchive ia(ifs);
    ia >> obj1;

    return 0;
}

2 个答案:

答案 0 :(得分:2)

boost/archive/text_iarchive.hppBoost.Serialization的一部分,肯定是不是仅限标题的库。

该库通常称为boost_serializationlibboost_serialization.so),如果您想使用boost_wserialization,还需要libboost_wserialization.sowchar_t)。

答案 1 :(得分:0)

您需要链接到boost :: serialization。将-lboost_serialization添加到您的LIBS。

LIBS += -lboost_serialization