2012-12-18 123 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

崩潰的原因是,你加載一個文件到內存中,然後嘗試使用不同的數據結構來訪問它 - 即使他們看起來一樣在你的源代碼,他們是不一樣的,在運行時,而不是當編譯爲不同的架構。