Ubuntu 64ビットで32ビットアプリを実行する方法


132

Ubuntu 14.04と、32ビットの実行可能ファイルを含む現在のAndroid開発SDKをインストールしました。これらの32ビットバイナリを実行できないことがわかりました。bashから起動しようとすると、エラーが発生します。

$ ./adb
bash: ./adb: No such file or directory

それはそこにあります:

$ ls -al ./adb
-rwxrwxrwx 1 thomas thomas 1231255 Jan 17 13:31 ./adb
$ file ./adb
./adb: ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, not stripped. Same symptom for all the other 32-bit tools in the Android SDK. 

昔は、64ビットUbuntuに32ビットライブラリをインストールするだけで32ビットをサポートできましたが、それはもう機能しないようです。

64ビットUbuntu 14.04で32ビットアプリを実行するにはどうすればよいですか?


回答:


186

64ビットマルチアーキテクチャUbuntuシステム上で32ビットの実行可能ファイルを実行するには、追加する必要がi386アーキテクチャをし、3つのライブラリパッケージをインストールしlibc6:i386libncurses5:i386、とlibstdc++6:i386

sudo dpkg --add-architecture i386

または、Ubuntu 12.04 LTS(Precise Pangolin)以下を使用している場合は、これを使用します:

echo "foreign-architecture i386" > /etc/dpkg/dpkg.cfg.d/multiarch

次に:

sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386

失敗した場合も行う

sudo apt-get install multiarch-support

これらの手順の後、32ビットアプリケーションを実行できるようになります。

./example32bitprogram

@AvinashRajこれは私を助けてくれました!しかし、実際に実行する最後のコマンド「sudo ./adb」は何ですか?
マルセル

1
現在のディレクトリにあった32ビットadbバイナリファイルを実行します。
アビナッシュラジ

1
Ubuntu 14.04でaaptを動作させるにはlib32z1、同様にインストールする必要がありましたが、libc6-i386でプルされていることに気付きました(区別、コロンではなくハイフンに注意)。
クリスベティ

私はあなたのステップをした、libc6:i386libncurses5:i386libstdc++6:i386最新バージョンおよび手動でインストールするように設定されています。しかしその後、「Soma packages could not be installed.This may mean you have requested impossible situation or you are using unstable distribution ...」と満たされていない依存関係:libstdc++6-4.4-dev:i386依存していますg++-4.4:i386(インストールされません)。競合:libstdc++6-4.4-dbg:i386...などに関するその他の競合libstdc++6-4.4/6/7。何が間違っているのか、今のままにしておくべきですか?
フレドリックガウス14年

@FredrickGaussがここに入ります
アビナッシュラジ14年

9

「そのようなファイルやディレクトリはありません」は、バイナリを持っているときに表示される場合がありますが、いくつかのライブラリがありません。build-essentialパッケージをインストールすると、lddコマンドが使用可能になります。このコマンドldd ./adb | grep notは、不足しているライブラリを表示します。aptを使用してこれらのライブラリをi386 archにインストールするだけです。このように:apt-get install libmissing:i386 注意してください、いくつかのバグのあるパッケージは64ビットバージョンのfirを削除しようとします。


奇妙なエラーメッセージを説明してくれてありがとう。私は最初に、bashがこのエラーを与える理由を混乱させました(ライブラリを失った子プロセスからより明確なエラーの代わりに)が、今ではbashはexec(3)がENOENTを返し、これを出力するのを見るだけです。
トーマスストゥフェ14

5

また、「adb」を使用する場合は、そのためのパッケージがあります。

sudo apt-get install android-tools-adb

また、約32ビットライブラリ-のみ:

sudo apt-add-architecture i386

十分になります。


ヒントをありがとう。しかし、Ubuntuリポジトリにあるものではなく、GoogleからダウンロードしたAndroidツールを使用したかった。また、そのパッケージの完全性についてもわかりません。
トーマスストゥフェ14

Ubuntuリポジトリには新しいバージョンが必要です。パッケージにはadbのみが含まれています。fastbootが必要な場合-パッケージもあります:)
aastefanov 14

3

ZannaとAvinash Rajの優れた回答に加えて、gcc-multilibもインストールする必要がありました。

sudo apt-get install gcc-multilib

おそらくこれは、64ビットで古いgccバージョンを実行したかったためです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.