2010-01-07 2 views
5

64 비트 Solaris (프로덕션) 시스템에서 Storable을 사용하여 고정 된 데이터베이스 BLOB를 해동하려고합니다. 32 비트 Windows (개발) PC에서 해동하려고하면 "Byte order is not compatible error"메시지가 나타납니다.32 비트 Perl을 사용하여 64 비트 Storable로 고정 된 것을 녹일 수있는 방법은 무엇입니까?

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

+1

이 질문에 직접 대답하는 것은 아니지만 64 비트 Intel 시스템은 저렴하고 Solaris는 무료입니다. 솔라리스 가상 머신이 Windows를 주로 운영하기를 원한다고해도 도움이됩니다. 내가 선택한 거의 모든 플랫폼에서 하나의 머신을 개발할 수있어서 기쁩니다. :) –

답변

8

Storable 문서는 말한다 :

저장 가능한 저장 가능 (네트워크 순서로 기록되지 않음) 내장 된 C 컴파일러에 대한 다양한 C 언어 유형의 크기를 포함하는 파일 헤더를 기록하고 파일을로드 할 거부합니다 동일한 (또는 호환되는) 아키텍처가 아니라 Storable이 작성한 것입니다. 동일한 섹션

, 그들은 저장 가능한 기본적인 이용은 로컬 및 FAST 지속성 방법임을 시사한다. 그러나 nstore을 사용하여 지속 된 구조를 네트워크 바이트 순서로 저장할 수 있습니다. 결과는 더 느리게 읽고 저장하지만 모든 플랫폼에서 작동합니다.

nstore을 사용하여 64 비트 컴퓨터를 사용하여 네트워크 순서로 데이터를 읽고 다시 저장해야한다는 제안이 있습니다.

+0

32/64 비트 갭 또는 빅 엔디안/리틀 엔디안 CPU에서만 작동합니까? – fennec

+0

@fennec : 완전히 이식 가능한 저장 가능 파일을 사용해야합니다. 필자가 언급 한 섹션에서는 64 비트 아키텍처를 다루고 있습니다. – Axeman

+0

프로덕션 서버에서 thaw/nfreeze를 피하려고했습니다. 그러나, 그것은 유일한 길인 것처럼 보였습니다. 그래서 그것은 제가 끝내었던 것입니다. – uxnow

5

필자는 가능한 문서라고 알고 있지만 64 비트 컴퓨터에서 nfreeze/nstore *를 사용하는 경우를 제외하고는 작동시키지 못했습니다.

관련 문제