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비트 형식이므로 물리적 메모리에서 더 많은 주소 공간을 지원합니다.