将 64 位库用于 32 位应用程序

将 64 位库用于 32 位应用程序

我们在 64 位 rhel 6.4 上有 32 位应用程序。如果我对二进制文件执行 ldd,它会显示它正在使用 32 位版本的 glibc。是否可以使其指向 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 位格式,支持物理内存中更多的地址空间。

相关内容