2016-06-13 7 views
1

クライアントとサーバーの間でデータを転送する必要があります。 Windows(msvc140)からDebian(gcc 64-bit)にサーバーを移動したとき、私はバイトストリームクラスの問題を持っています(boostに基づいています)。それらのアーカイブは異なっています。 boostboost binary_oarchiveはコンパイラごとに異なる動作をします

#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 
} 

両方のバージョンが文書化されています1.61.0

+0

の代わりに使用することは非常に簡単ですが、あなたのWindowsの32ビットのですか? @Leon。 – Leon

+0

はい。そうです。 – Ufx

答えて

2

です。 http://www.boost.org/doc/libs/1_49_0/libs/serialization/doc/todo.html#portablebinaryarchives

Boost自体に移植可能なアーカイブはありません。あなたはEOSポータブルアーカイブを見てみたい

https://epa.codeplex.com/

彼らはあなたのコードベースにドロップすると、boost::archive::binary_[io]archive

+0

例には '#include 'が含まれていますが、このファイルはboost/archiveにはありません。 – Ufx

+2

これは、それがブーストの一部ではないからです。それは文字通り私の答えです。私はまた、私の答えでダウンロードするためのプロジェクトにリンクします – sehe

+0

#include - そのようなファイルはありません。 boost/serialization/shared_ptr_helper.hppに置き換えられた場合 - エラー: 'boost :: serialization :: shared_ptr_helper':クラステンプレートの使用にテンプレート引数リストが必要です。 – Ufx

関連する問題