2012-12-18 93 views
1

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

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

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

+4

绝对没有办法来帮助你在那里有什么。看起来你的二进制文件格式在32位和64位之间不可移植,并且没有明确的字节顺序。只有你可以做转换。 – Mat

回答

1

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