32비트 애플리케이션과 함께 64비트 라이브러리 사용

32비트 애플리케이션과 함께 64비트 라이브러리 사용

64비트 rhel 6.4에는 32비트 애플리케이션이 있습니다. 바이너리에서 ldd를 수행하면 glibc의 32비트 버전을 사용하고 있음이 표시됩니다. 64비트 버전의 glibc를 가리키도록 할 수 있나요? 그렇다면 어떻게 해야 합니까?

-m32 플래그를 사용하여 바이너리를 컴파일했습니다.

답변1

아니요, 불가능합니다. 그들은 서로 다른 바이너리 형식을 사용하고, 서로 다른 호출 규칙, 서로 다른 명령 세트, 서로 다른 시스템 호출 방법 등 모든 것을 사용합니다.

root@el6 ~ # file /lib/libc-2.12.so 
/lib/libc-2.12.so: ELF 32-bit LSB shared object, Intel 80386, [...]

root@el6 ~ # file /lib64/libc-2.12.so 
/lib64/libc-2.12.so: ELF 64-bit LSB shared object, x86-64, [...]

32비트 바이너리에는 32비트 라이브러리가 필요하고, 64비트 바이너리에는 64비트 라이브러리가 필요합니다. 애플리케이션에서 64비트 libc를 사용하려면 -m32 없이 64비트 애플리케이션으로 컴파일하세요.

답변2

아니요, 32비트 버전이 64비트 버전과 호환되지 않기 때문에 그럴 수 없습니다. 64비트 버전은 64비트 명령어 세트를 사용하고 주소도 64비트 형식이므로 물리적 메모리에서 더 많은 주소 공간을 지원합니다.

관련 정보