使用Solaris 64位或Linux 32位到Linux 64位的内存映射文件

时间:2012-12-18 13:21:16

标签: c++ shared-memory file-conversion

我们的应用程序使用多个内存映射文件在多个进程之间进行通信。生产在64位的solaris上运行,开发机器是32位的linux。在未来,我们希望在所有环境中使用64位Linux。编译已经完成,现在我需要存储在内存映射文件中的数据。不幸的是,如果我使用32位linux中的文件,我会收到“总线错误”。如果我使用了64位solaris的文件,则进程崩溃。

据我所知,由于32位文件中的地址错误(文件末尾以外的地址)发生总线错误。此外,似乎solaris文件与Linux系统不兼容。因此,我在64位linux上创建了新的内存映射文件,应用程序正常工作,但显然没有数据。

有没有办法在新的64位linux系统上读取这些文件的旧版本?我想编写自己的转换程序来提取数据并填充新生成的文件。

1 个答案:

答案 0 :(得分:1)

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