2009-08-28 11 views
1

64 비트 컴퓨터에서 실행되는 응용 프로그램을 개발 중입니다.32 비트 64 비트 호환

그러나 우리는 변경할 수없는 32 비트 정수가있는 라이브러리를 사용하고 있습니다. 64 비트 컴퓨터에서 컴파일하고 실행해야합니다.

응용 프로그램이 실행 중일 때 어떤 영향이 있습니까? 주변에 어떤 문제가 있습니까? 어떤 조언을

많은 감사,

+1

어떤 운영체제입니까? –

+0

Windows XP x86 및 Vista x64 비트의 경우. 나는 단지 정수로 계산하는 것에 대해 궁금해했다. 나는 틀린 대답을 얻을 것입니까? – ant2009

답변

1

라이브러리의 출처가 있으십니까? 그렇다면 컴파일하고 다시 컴파일하면 라이브러리 작성자가 x86-64 용으로 컴파일 할 때 손상된 가정을하지 않는 한 그 라이브러리를 사용하지 못하게 될 수 있습니다. 열심히 테스트하고 오래 테스트하십시오.

에 소스 (i386 컴파일 된 바이너리 만 있음)가 없으면 링커에서 x86-64 코드를 링크 할 수 없게됩니다. ABI는 호환되지 않습니다.

두 번째 경우에는 32 비트 라이브러리로 연결되는 별도의 32 비트 도우미/래퍼 프로세스를 만들어야하며 IPC 메커니즘을 통해 64 비트 프로세스에서 라이브러리를 호출하도록 요청해야합니다 (결과를 반환). IPC 주변의 64 비트 측면에서 래퍼 함수를 ​​생성하여 라이브러리에 대한 일반 호출처럼 보이게 할 수 있습니다. 64 비트 프로세스는 시작할 때 32 비트 도우미 프로세스를 시작해야합니다 (부모 프로세스가 사라지면 도우미 프로세스가 종료되었는지 확인해야합니다).

2

난 당신에 대한 64 비트를 이야기 할 때 당신이 여기 x86 및 x86_64의 의미 있으리라 믿고있어.

int은이 두 아키텍처에서 모두 32 비트입니다. 당신이 생각하는 경우

당신이로 실행하는 경향이 유일한 문제

은 다음과 같습니다

  • sizeof(void*) == sizeof(int)
  • sizeof(int) == sizeof(long)
  • long 또는 long long의 크기는 같은 크기입니다.

그렇지 않으면 괜찮을 것입니다.

+1

"int는 항상 32 비트입니다."- 사실이 아닙니다. 유일한 요구 사항은 int가 적어도 16 비트를 가지며'sizeof (short) <= sizeof (int) && sizeof (int) <= sizeof (long)'입니다. 실제로 int는 일반적으로 16 비트 시스템에서 16 비트입니다 (더 이상 주위에있는 많은 사람들이 아닙니다). – sepp2k

+0

나는이 질문을하는 모든 컴퓨터 사용자가 32 비트 정수를 가지며 이미 언급했음을 생각합니다. 어쨌든 내 대답을 수정했습니다. –

관련 문제