【问题标题】:Use memory mapped files from Solaris 64 Bit or Linux 32 Bit to Linux 64 Bit使用从 Solaris 64 位或 Linux 32 位到 Linux 64 位的内存映射文件
【发布时间】: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


【解决方案1】:

它崩溃的原因是您将文件加载到内存中,然后尝试使用不同的数据结构访问它 - 即使它们在您的源代码中看起来相同,但在运行时它们并不相同,而不是针对不同架构编译时。

【讨论】:

    猜你喜欢
    • 2013-05-19
    • 2014-07-29
    • 2012-10-26
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多