【问题标题】:Boost binary file read error unsupported versionBoost二进制文件读取错误不支持版本
【发布时间】:2017-05-13 09:19:08
【问题描述】:

我正在做序列化序列。

在windows系统中,我通过boost::serialization制作二进制文件

好像没有问题。

但是,如果我将此二进制文件移动到 linux 系统并加载二进制文件 编译器说不支持的版本。

我不知道这个问题。

谁能帮助我们?

Windows 和 linux Boost 版本相同。 boost 版本是 1_63_0。

Adjcency_grpah LoadGraphData(char *fileName) {
    Adjcency_grpah g;
    std::ifstream ifs(fileName, std::ios::binary);
    if (!ifs) {
        cout << "Read Error" << endl;
        exit(1);
    }
    try {
        boost::archive::binary_iarchive ia(ifs);
        ia & BOOST_SERIALIZATION_NVP(g);
        cout << "Restoring Graphs Serialize Success\n" << endl;
    }
    catch (boost::archive::archive_exception e) {
        cout << "BOOST ERROR " << e.what() << std::endl;
    }
    return g;
}

它仍然说 "BOOST ERROR 不支持的版本 时间:0"

【问题讨论】:

  • 如果您可以发布一个实际的 SSCCE,那么我们可以对其进行审核,看是否有任何错误。
  • 生成二进制文件的组件很多。所以,我想发布它,但是很难制作示例代码......
  • 通过SaveGraphData代码在windows中生成二进制文件。然后我用 sftp 把它移到 Linux 服务器上。在 Linux 系统中,我运行我之前提到的代码。编译器说不支持的版本。
  • 我们没有留下深刻印象:coliru.stacked-crooked.com/a/798201d67ba5805a 演示从随机 100 节点图创建二进制存档并将其读回。使用两个不同创建的图检查往返。不客气。

标签: c++ linux serialization boost binaryfiles


【解决方案1】:

Boost 的内置二进制存档不可移植。文档中是这么说的。

相反,您应该可以使用 EOS Portable Archive。它与 Boost 序列化完全兼容。

除此之外,请务必使用与平台无关的类型标识符(因此,int64_t 而不是 long 等)。

【讨论】:

  • EOS Portable Archive 是 c++ 的库吗?
  • 其实可以看一下链接。如果您不喜欢访问网页,请使用安全浏览器。如果不是 C++ 就不能“完全兼容 Boost 序列化”,对吧?
  • 哦!是的,我明白了,我正在调整 EOS 存档!我从网站下载 zip 文件,但 zip 文件夹中没有“portable_binary_iarchive.hpp”文件。名称是否更改为“portable_iarchive.hpp”?
猜你喜欢
  • 1970-01-01
  • 2021-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-04
  • 1970-01-01
  • 2023-03-13
相关资源
最近更新 更多