【发布时间】:2017-01-23 22:29:43
【问题描述】:
由于某种原因,MSVC 不使用以下代码编译 boost 序列化示例:
class MyName
{
public:
MyName(std::string _name, std::string _family_name)
:name{ _name }, family_name{ _family_name }
{ }
private:
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{ ar & name; ar & family_name; } std::string name; std::string family_name;
};
int main()
{
// create and open a character archive for output
std::stringstream ofs;
// save data to archive
{
MyName my_name("MyName", "FamilyName");
boost::archive::text_oarchive oa(ofs);
// write class instance to archive
oa << my_name;
// archive and stream closed when destructors are called
}
// save data to archive
{
MyName my_name("afsf", "dgsass");
boost::archive::text_iarchive oa(ofs);
// write class instance to archive
oa >> my_name;
// archive and stream closed when destructors are called
}
return 0;
}
我收到以下错误:
Severity Code Description Project File Line Suppression State
Error LNK2019 unresolved external symbol "public: __thiscall boost::archive::archive_exception::archive_exception(enum boost::archive::archive_exception::exception_code,char const *,char const *)" (??0archive_exception@archive@boost@@QAE@W4exception_code@012@PBD1@Z) referenced in function "protected: void __thiscall boost::archive::basic_text_iprimitive<class std::basic_istream<char,struct std::char_traits<char> > >::load<unsigned int>(unsigned int &)" (??$load@I@?$basic_text_iprimitive@V?$basic_istream@DU?$char_traits@D@std@@@std@@@archive@boost@@IAEXAAI@Z) cpp11_cpp14_cpp17 D:\Projects_Programing\__Testing\cpp11_cpp14_cpp17\cpp11_cpp14_cpp17\cpp11_cpp14_cpp17.obj 1
但是当我在发布模式下编译它时。 我已经读到它可能由于 MSVC STRICT 模式而发生,但我已经尝试过,它也不起作用。
有人遇到过这样的错误吗?
【问题讨论】:
-
我创建了一个简单的
MyName结构,它对我来说编译得很好。请出示您的MyName班级。 -
@lakeweb 下面你可以看到 MyName 的实现:
class MyName { public: MyName(std::string _name, std::string _family_name) : name{ _name }, family_name{ _family_name } { } private: friend class boost::serialization::access; template<class Archive> void serialize(Archive & ar, const unsigned int version) { ar & name; ar & family_name; } std::string name; std::string family_name; }; -
仍然可以正常编译。我跑了,我认为是SP3。上半年某处出现的服务包。这是我从这里能想到的唯一事情。我只使用了两个标题,
text_oarchive.hpp和text_iarchive.hpp。你呢?我使用的是 1.62。你应该把它都贴出来,这会有所帮助。 -
@lakeweb 我也使用 boost 1.62 和 SP3。你应该明白它只发生在调试模式编译中。另外我放了 libboost_serialization-vc140-mt-gd-1_62.lib libboost_wserialization-vc140-mt-gd-1_62.lib libboost_exception-vc140-mt-gd-1_62.lib
-
嗨,我只尝试了调试版本。我从不查看链接到哪些库,因为 boost 很好地处理了这一点。我使用一个库路径:$(BOOST_LIB),因此,如果您通过选择库进行链接,听起来好像缺少一个。不要添加库,只需将您的 Linker->General->Additional Library Directories 设置为您的 boost lib 文件夹。那么你就不用担心你需要什么库了。
标签: visual-c++ serialization boost visual-studio-2015