2010-01-07 3 views
5

Я пытаюсь оттереть BLOB базы данных, которая была заморожена с использованием Storable на 64-разрядной машине Solaris (производство). Когда я пытаюсь оттепель на 32-битном Windows (разработке) ПК, я получаю «Byte order is not compatible error».Как я могу использовать 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) 

линия 124 SearchSendQueue.pm:

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

Кто-нибудь знает, как я могу растопить этот объект на 32-битной машине?

Примечание: объект действителен и работает на 64-битной производственной машине. Я уже пробовал «$ Storable :: interwork_56_64bit = 1;» как это было предложено на других форумах.

+1

Если это проблема с байтом, вы можете попробовать изменить порядок байтов с помощью пакета()? – Ether

+1

Это не отвечает на ваш вопрос напрямую, но 64-разрядные компьютеры Intel дешевы, а Solaris - бесплатно. Даже если вы хотите в основном запускать Windows, виртуальная машина Solaris может помочь. Я очень рад, что могу использовать одну машину для разработки на любой платформе, которую я выбираю. :) –

ответ

8

Storable документация говорит:

Storable записывает заголовок файла, который содержит размеры различных типов языка C для компилятора Си, который построил Storable (если не писать в сетевом порядке), и отказывается загружать файлы написанный Storable не на той же (или совместимой) архитектуре.

В том же разделе, они предполагают, что основное применение сохраняемого является локальным и БЫСТРО метод настойчивости. Однако вы можете использовать nstore для сохранения сохраненной структуры в сети . Результатом будет то, что он читает и сохраняет медленнее, но работает на всех платформах.

Итак, вы должны использовать 64-разрядную машину для чтения и повторного хранения данных в сетевом порядке с помощью nstore.

+0

Это работает для 32/64-битных разрывов или просто для процессоров с большим или низким порядком? – fennec

+0

@fennec: Это должно работать для полностью переносных хранящихся файлов. В разделе, на котором я ссылался, речь идет о 64-битных архитектурах. – Axeman

+0

Я пытался избежать оттаивания/nfreeze на производственном сервере. Тем не менее, это был единственный способ, так что я и закончил. – uxnow

5

Я знаю, что документы указывают, что это возможно, но я никогда не мог заставить его работать, кроме как с помощью nfreeze/nstore * на 64-битной машине.