C++ boost binary_oarchive对不同的编译器的工作方式不同
我需要在客户端和服务器之间传输数据。当我将服务器从Windows(msvc140)移动到Debian(gcc 64位)时,基于C++ boost binary_oarchive对不同的编译器的工作方式不同,c++,c++11,boost,C++,C++11,Boost,我需要在客户端和服务器之间传输数据。当我将服务器从Windows(msvc140)移动到Debian(gcc 64位)时,基于boost的字节流类出现了问题。他们的档案不同 #include <string> #include <boost/archive/binary_oarchive.hpp> #include <boost/iostreams/device/back_inserter.hpp> #include <boost/iostrea
boost
的字节流类出现了问题。他们的档案不同
#include <string>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/iostreams/device/back_inserter.hpp>
#include <boost/iostreams/stream.hpp>
int main()
{
std::string s;
typedef boost::iostreams::back_insert_device<std::string> BackInsertDevice;
typedef boost::iostreams::stream<BackInsertDevice> Stream;
typedef boost::archive::binary_oarchive BinaryOArchive;
Stream stream(s);
BinaryOArchive ar(stream);
ar << "qwer" << 10;
stream.flush();
int sz = s.size();
// Windows (msvc140): 49
// Debian (gcc 64-bit): 57
}
#包括
#包括
#包括
#包括
int main()
{
std::字符串s;
typedef boost::iostreams::back\u insert\u device BackInsertDevice;
typedef boost::iostreams::stream;
typedef boost::archive::binary_oarchive binaryorchive;
溪流;;
二棱韭菜ar(溪流);
ar这是有记录的
Boost本身没有可移植的归档
您想查看EOS便携式存档:
它们很容易放入您的代码库并使用,而不是boost::archive::binary\uIO]存档
是您的Windows 32位吗?@Leon。是的。它是。示例包含#include
,但我在boost/archive中没有此文件。这是因为它不是boost的一部分。这在我的回答中是真实的。我还链接到项目,供您在我的回答中下载#include-没有这样的文件。如果替换为boost/serialization/shared\ptr\u助手.hpp-错误:“boost::serialization::shared_ptr_helper”:使用类模板需要模板参数列表。您在做什么?只需将这些文件安装在源代码树旁边(比如epa/
),并将其添加到包含搜索路径。这就是您添加它的原因。它不是boost替换。它只是一种附加的归档类型。