二进制文件和跨平台兼容性

Sti*_*MAN 6 c c++ filesystems ubuntu windows-xp

我编写了一个C++库,将我的数据(自定义结构的集合等)保存到二进制文件中.我目前在Windows(XP)机器上本地使用(即创建使用)文件.为简单起见,让我们将库分为两部分:编写器(创建文件)和读者使用者(只是从文件中读取数据).

最近,我还想在我的Linux机器上使用(即读取)我在XP机器上创建的数据文件.我必须在这个阶段指出两台机器都是PC(因此具有相同的endianess等).

我可以构建一个阅读器(并为Linux编译[确切地说是Ubuntu 9.10]),因为我是图书馆创建者.我的问题,在我踏上这条道路(构建读者等)之前是:

假设我已经成功构建了适用于Linux的阅读器,

我可以简单地将在Windows(XP)机器上创建的文件复制到Linux(Ubuntu 9.10)机器并使用Linux阅读器成功读取复制的文件吗?

moo*_*dow 15

对于要二进制兼容的文件:

  • 字节顺序必须匹配(就像它一样)
  • 位域包装顺序必须相同
  • 类型的大小和签名必须相同
  • 编译器必须做出有关填充和对齐的相同决定

所有这些条件当然有可能实现,或者你不会碰巧遇到任何不适合的情况.但至少,我会添加一些健全性检查和/或哨兵成员来检测问题.

  • @Stick it:"sentinel members",我的意思是安排写入文件的顶级结构包含一个具有已知常量值的成员,并在文件末尾放置一个; 在加载时,检查这些成员是否包含您期望的值 - 这应该捕获编译器之间的大小/填充不同的问题. (2认同)