6

我正在尝试解冻在 64 位 Solaris(生产)机器上使用 Storable 冻结的数据库 BLOB。当我尝试在 32 位 Windows(开发)PC 上解冻时,我收到“字节顺序不兼容错误”。

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;” 正如其他论坛所建议的那样。

4

2 回答 2

9

可存储的文档说:

Storable 为构建 Storable 的 C 编译器编写一个包含各种 C 语言类型大小的文件头(当不按网络顺序编写时),并且将拒绝加载由不在相同(或兼容)架构上的 Storable 编写的文件。

在同一节中,他们建议 Storable 的基本用途是本地和FAST持久性方法。但是,您可以使用nstore网络字节顺序存储持久结构。结果将是它读取和存储速度较慢,但​​适用于所有平台。

所以建议你必须使用 64 位机器来读取和重新存储数据,使用nstore.

于 2010-01-07T07:41:46.323 回答
5

我知道文档表明它应该是可能的,但是除了在 64 位机器上使用 nfreeze/nstore* 之外,我一直无法让它工作。

于 2010-01-07T06:24:07.920 回答