2010-01-07 29 views
5

我試圖解凍在64位Solaris(生產)計算機上使用Storable凍結的數據庫BLOB。當我嘗試在32位Windows(開發)PC上解凍時,我收到「字節順序不兼容錯誤」。如何使用32位Perl解凍64位可凍結的東西?

perl -v (on solaris) 
This is perl, v5.8.8 built for i86pc-solaris-64 

perl -v (on Windows) 
This is perl, v5.10.1 built for MSWin32-x86-multi-thread 

精確的錯誤是:

(Unable to read: Byte order is not compatible at blib\lib\Storable.pm (autosplit into blib\lib\auto\Storable\thaw.al) line 415, at ../handlers/Search/actions/SearchSendQueue.pm line 124) 

線SearchSendQueue.pm 124:

my $object = thaw($item->{object}); 

有誰知道我可以在32位機器上解凍此對象嗎?

注意:該對象在64位生產機器上有效且正在使用。 我已經試過「$ Storable :: interwork_56_64bit = 1;」正如其他論壇所建議的那樣。

+1

如果這只是一個字節順序問題,你可以嘗試用pack()顛倒字節順序? – Ether 2010-01-07 06:27:38

+1

這並不能直接回答你的問題,但是64位的英特爾機器很便宜,Solaris是免費的。即使您想要大部分運行Windows,Solaris虛擬機也可以提供幫助。我很高興能夠使用一臺機器來開發幾乎任何我選擇的平臺。 :) – 2010-01-07 13:11:58

回答

8

Storable文件說:

可存儲寫入一個文件頭包含各種C語言類型爲C編譯器,內置可存儲(當網絡爲了不寫)的尺寸,並拒絕加載文件由不同的(或兼容的)體系結構編寫。

在同一節中,他們建議的基本使用可存儲的是一個地方和FAST持久性方法。但是,您可以使用nstore網絡字節順序存儲持久化結構。結果將是它讀取和存儲速度較慢,但​​可在所有平臺上工作。

因此,建議您必須使用64位機器以nstore的網絡順序讀取和重新存儲數據。

+0

這是否適用於32位/ 64位間隙或僅適用於大端/小端CPU? – fennec 2010-01-07 13:21:37

+0

@fennec:這應該適用於完全可移植的可存儲文件。我參考的章節專門介紹了64位體系結構。 – Axeman 2010-01-07 21:06:28

+0

我試圖避免在生產服務器上解凍/凍結。但是,這似乎是唯一的方法,所以我最終做了這些。 – uxnow 2010-01-12 02:30:05

5

我知道文檔表明它應該是可能的,但除了在64位機器上使用nfreeze/nstore *之外,我從未能夠使其工作。