如何使用 32 位 Perl 解冻使用 64 位 Storable 冻结的内容?

发布于 2024-08-16 22:15:21 字数 729 浏览 11 评论 0原文

我正在尝试解冻在 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;”正如其他论坛上的建议。

I'm trying to thaw a database BLOB that was frozen using Storable on a 64-bit Solaris (production) machine. When I try to thaw on a 32-bit Windows (development) PC I receive "Byte order is not compatible error".

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

Exact error is:

(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 )

line 124 of SearchSendQueue.pm:

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

Does anybody know how I can thaw this object on the 32-bit machine?

Note: The object is valid and working on the 64 bit production machine.
I've already tried "$Storable::interwork_56_64bit = 1;" as suggested on other forums.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

猫瑾少女 2024-08-23 22:15:21

可存储文档说:

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

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

因此建议您必须使用 64 位计算机使用 nstore 按网络顺序读取和重新存储数据。

Storable documentation says:

Storable writes a file header which contains the sizes of various C language types for the C compiler that built Storable (when not writing in network order), and will refuse to load files written by a Storable not on the same (or compatible) architecture.

In the same section, they suggest that the basic use of Storable is a local and FAST persistence method. However, you can use nstore to store the persisted structure in network byte order. The result will be that it reads and stores slower but works across all platforms.

So the suggestion is that you'll have to use the 64-bit machine to read and re-store the data in network order using nstore.

顾北清歌寒 2024-08-23 22:15:21

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

I know the docs indicate it's supposed to be possible, but I've never been able to get it to work except by using nfreeze/nstore* on the the 64-bit machine.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文