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ビット形式であるため、物理メモリ内のより多くのアドレス空間をサポートします。

関連情報