web-dev-qa-db-ja.com

32ビットUbuntuシステムで64ビットアプリを実行する

私が見たすべての質問は、64ビットシステムで32ビットアプリを実行することに関するものです。

私は32ビットUbuntu 12.04(実際にはそれをベースとする基本的なOS Luna)を実行していますが、64ビットアプリを実行しようとしています。ランニング:

./64bit_app.run

(どこ 64bit_app.runは、実行しようとしている64ビットのアプリです)結果は次のようになります。

bash: ./64bit_app.run: no se puede ejecutar el fichero binario

これは「バイナリファイルを実行/実行/開くことができない」に変換されます。

実行できますか? 32ビットシステムで64ビットアプリを実行することは可能ですか?もしそうなら、どうですか?

10
Gabriel

32ビットカーネルを搭載したLinux on x86_64では、これを直接行うことはできません。 64ビットコードを実行するには、64ビットカーネルが必要です。 (注:カーネル。64ビットカーネルで32ビットユーザーランドを実行し、64ビットバイナリのサポートをインストールできます。これがどれほど簡単かは、ディストリビューションによって異なります。例 ここ Debianの場合。)

一部の仮想化ソフトウェアはこれを実行でき(使用しているCPUのタイプに制限があります)、エミュレーターもそれを実行できます。ただし、ネイティブで実行するには、64ビットカーネルが必要です。

そこにあるほとんどの64ビットディストリビューションは32ビットをサポートしているため(デフォルトまたはインストール可能)、同じOSで64ビットと32ビットの両方のバイナリを実行する必要がある場合は、これを使用する必要があります。

8
Mat

@Matの答えを拡張する:

はい、一部の仮想化ソフトウェアはそれを行うことができます。処理の主な障害は、32ビット環境では、CPUの64ビット機能が利用できず、64ビットカーネルの機能も利用できないことです。 CPU has 64ビットをサポートしている場合も同様です(2003年頃以降、すべてサポートされています)。

あなたの質問は、あなた自身のシステム環境で64ビットアプリを実行したいことを暗黙的に述べています。それが本当にあなたの意図である場合、これはすべての仮想マシンベースのソリューションを除外します。私が知っている唯一の残りは、qemuのカーネルエミュレーションです。そう:

qemu-x86_64 ./your_64bit_app

アプリを実行します現在のシステムで、現在のカーネルで、現在の環境変数で。もちろん、それほど高速ではありません。CPUをエミュレートする必要があります。

Linux x86-64アプリのみをエミュレートできます。

ほとんどの64ビットアーキテクチャは、32ビットアーキテクチャの拡張機能です。それらは新しく、完全に異なっているので、32ビットアーキテクチャは明らかに64ビットの対応物が何であるかを知りません。彼らは、新しい機能が何であるか、新しいレジスタが何であるかを知りません...彼らが知っていても、彼らは新しいレジスタと機能にアクセスできません。その結果、32ビットカーネルは64ビットコンテキストを保存できません。これらすべてが、32ビットシステムで64ビットアプリを実行することを不可能にしています。

慎重に作成された64ビット対応の32ビットカーネル 64ビットアプリを実行できます ですが、コンテキストを節約するために64ビットコードが必要であり、純粋な32ビットカーネルではありませんもう。

エミュレータ内で64ビットOSを実行するか、VT-xを使用して32ビットホスト内で64ビットゲスト仮想マシンを実行できます。しかし、技術的には別の64ビットシステムで実行しています。 32ビットLinuxカーネルで64ビットコードを直接実行することはまだ不可能です

1
phuclv