2009-12-22 15 views
15

32 비트 .so 바이너리 전용 라이브러리가 있고이를 사용하는 64 비트 프로그램을 생성해야합니다. 랩핑하거나 변환하여 64 비트 프로그램과 함께 사용할 수 있습니까?32 비트 라이브러리를 64 비트 프로그램에 연결

+0

나는 64 비트를 타깃으로하는 라이브러리 코드를 재 컴파일 할 것을 제안하려고했으나, 당신이 그 소스를 가지고 있지 않다는 인상을 받았다. 64 비트 코드가 32 비트를 넘을 수 있다면 ... 나는 의심 스럽다. 리눅스의 gcc? 그러나 다시이 '썽킹'은 Win95의 특징이었습니다 (기억하십니까?) 32 비트 코드는 16 비트 코드를 호출합니다 ... 32 비트 동적 라이브러리 (.so)를 참조하고 실행중인 64 비트 코드를 연결해 보았습니까? – t0mm13b

+0

현대의 64 비트 운영 체제에는 "뚝뚝"이 없습니다. 이것은 작동하지 않습니다. –

답변

27

아니요 64 비트 프로그램에서 32 비트 코드로 직접 링크 할 수 없습니다.

가장 좋은 방법은 run on your 64bit platform (using ia32)이 될 수있는 32 비트 (독립 실행 형) 프로그램을 컴파일 한 다음 프로세스 간 통신 형식을 사용하여 64 비트 프로그램에서 통신하는 것입니다.

+1

@Reed : 그럼 Win95는 16 비트를 '썽킹'이라고 부르는 32 비트 코드에서 어떻게 전환 했습니까? 어셈블러 레벨에서 스택 포인터와 레지스터를 바꿀 수 있습니까? – t0mm13b

+6

OS는이를 명시 적으로 처리했지만 Linux 나 최신 64 비트 Windows 운영 체제에서는이를 허용하지 않으므로 게시 한 것과 같은 해결 방법을 사용해야합니다. –

+0

@Reed : 내 질문에 답해 주셔서 감사합니다. :) – t0mm13b

3

진지한 마법 없이는 가능하지 않지만 답을 좋아하지 않을 수도 있습니다. 32 비트 CPU를 에뮬레이트하거나 (농담이 아니다) 메인 프로세스를 다시 32 비트로 전환한다. 에뮬레이션은 느려질 수 있습니다.

This is a proof of concept 기술 중.

그런 다음 의 테이블을 각 메모리 액세스와 32 비트 라이브러리간에 유지하고 동기화 상태를 유지하십시오. 이론적 완성도를 얻는 것은 매우 어렵지만 실행 가능한 것은 매우 쉽지만 매우 지루해야합니다.

대부분의 경우 두 가지 프로세스와 IPC가 실제로 가장 쉽다고 믿습니다.

4

IPC를 사용하여 64 비트 코드에서 32 비트 플러그인을 실행하는 예는 오픈 소스 NSPluginWrapper을 참조하십시오.

관련 문제