尝试使用 boost::serialization 序列化 std::wstring 时出错

Error when trying to serialize std::wstring with boost::serialization

我正在尝试使用 std::wstring 变量序列化 class,但我得到的是多个 undefined reference to ~ 错误。

我似乎没有遗漏任何 headers 或库,从我从 boost::serialization 文档中读到的内容来看,std::wstring 似乎是一种原始类型不需要任何覆盖。

我添加了以下内容headers:

#include <boost/archive/text_woarchive.hpp>
#include <boost/archive/text_wiarchive.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/serialization/string.hpp>
#include <boost/serialization/vector.hpp>
#include <iostream>
#include <sstream>
#include <string>
#include <locale>

我正在尝试序列化的 class 看起来像这样:

class A
{
public:
    A() = default;

    void setWstr(const std::wstring &wstr)
    {
        wstr_ = wstr;
    }

    const std::wstring &getWstr()
    {
        return wstr_;
    };

private:
    std::wstring wstr_;

    friend class boost::serialization::access;

    template <typename Archive>
    void serialize(Archive &ar, const unsigned int version)
    {
        ar &boost::serialization::make_nvp("wstr", wstr_);
    }
};

int main()
{
    std::wstring sdn = L"src dept";

    A test;
    test.setWstr(sdn);

    std::wstringstream ss;
    boost::archive::text_woarchive oa(ss);
    oa << test;

    return 0;
}

我遇到的错误是:

in function `text_woarchive_impl':
undefined reference to `boost::archive::basic_text_oprimitive<std::basic_ostream<wchar_t, std::char_traits<wchar_t> > >::basic_text_oprimitive(std::basic_ostream<wchar_t, std::char_traits<wchar_t> >&, bool)'

in function `text_woarchive_impl':
undefined reference to `boost::archive::basic_text_oarchive<boost::archive::text_woarchive>::init()'

`~text_woarchive_impl':
undefined reference to `boost::archive::basic_text_oprimitive<std::basic_ostream<wchar_t, std::char_traits<wchar_t> > >::~basic_text_oprimitive()'

有办法解决这个问题吗?

ETA) 我链接了以下库

 -lboost_serialization  -lpthread  -lboost_system  -lboost_program_options  -lboost_chrono

序列化对象分为两个库:boost_serialization(您正在链接)和 boost_wserializationwchar 等的相应对象。因此,您需要将 -lboost_wserialization 添加到链接器标志中。