【发布时间】:2012-12-05 17:12:18
【问题描述】:
我们的应用程序使用多个内存映射文件在多个进程之间进行通信。生产运行在 64 位的 solaris 上,开发机器是 32 位的 linux。将来我们希望在所有环境中使用 64 位 linux。编译已经完成,现在我需要存储在内存映射文件中的数据。不幸的是,如果我使用 32 位 linux 中的文件,我会收到“总线错误”。如果我使用了64位solaris的文件,进程就崩溃了。
据我了解,发生总线错误是因为 32 位文件(地址超出文件末尾)中的寻址错误。此外,solaris 文件似乎与 linux 系统不兼容。因此,我在 64 位 linux 上创建了新的内存映射文件,应用程序可以运行,但显然没有数据。
有没有办法让我在新的 64 位 linux 系统上读取这些文件的旧版本?我想编写自己的转换程序来提取数据并填充新生成的文件。
【问题讨论】:
-
绝对没有办法帮助您处理您所拥有的一切。看起来您的二进制文件格式在 32 位和 64 位之间不可移植,并且没有明确定义的字节序。只有您可以进行转换。
标签: c++ shared-memory file-conversion