ADT(Android開発ツール)バンドルは「Linux 64ビット」zipパッケージで提供されていますが、次の要件を明記してください。:
64ビットディストリビューションは32ビットアプリケーションを実行できる必要があります。
実際、Fedora 17 64ビットシステムでパッケージ化されたEclipseを実行すると、次のような複数のadb
開発ツールを「見つける」ことができないため、エラーが発生しますaapt
。
aapt 実行エラー: '/home/juuser/local/adt-bundle-linux/sdk/platform-tools/aapt' プログラムを実行できません。エラー=2、対応するファイルまたはディレクトリなし:エラー=2、対応するファイルまたはディレクトリなし
「該当ファイルなし」は $HOME/local の下にあるため、誤解を招くおそれがあります。
adt-bundle-linux/sdk/platform-tools/aapt
しかし、シェルでは実行できません。
~/local $ ./adt-bundle-linux/sdk/platform-tools/aapt
zsh: no such file or directory: ./adt-bundle-linux/sdk/platform-tools/aapt
ファイルを見る
$ file adt-bundle-linux/sdk/platform-tools/aapt
adt-bundle-linux/sdk/platform-tools/aapt: ELF 32-bit LSB executable, Intel 80386,
version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8,
not stripped
私たちはそれが32バイナリであることがわかります。そして、私のシステムは(現在)32ビットアプリケーションを実行できないようです。
これをどのように変更できますか?現在、Fedora 64ビットシステムで32ビットアプリケーションを実行するにはどうすればよいですか?
(もちろん、誰かが「Linux 64-bit」というバイナリパッケージに32ビットバイナリを入れた理由を尋ねることもできます。)
答え1
これは、Eclipseが見つからないadb
などに関しては、システムで実行するために必要な32ビット共有ライブラリがないと実行できないためです。
32ビットライブラリの場合、状況は非常に簡単です。適切な32ビットライブラリをインストールするだけです。 64ビットFedora 17インストールでは、デフォルトの64ビットライブラリは/usr/lib64にあり、オプションの32ビットライブラリは/usr/libにあります。したがって、ldd
SDK/platform-tools/adb を呼び出すと、次のようになります。
linux-gate.so.1 => (0xf7791000)
librt.so.1 => /lib/librt.so.1 (0xf776c000)
libncurses.so.5 => /lib/libncurses.so.5 (0xf7747000)
libpthread.so.0 => /lib/libpthread.so.0 (0xf772d000)
libstdc++.so.6 => /lib/libstdc++.so.6 (0xf7644000)
libm.so.6 => /lib/libm.so.6 (0xf7618000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xf75fb000)
libc.so.6 => /lib/libc.so.6 (0xf7449000)
/lib/ld-linux.so.2 (0xf7792000)
libdl.so.2 => /lib/libdl.so.2 (0xf7444000)
libtinfo.so.5 => /lib/libtinfo.so.5 (0xf7424000)
これは/usr/lib(/usr/lib64ではない)へのシンボリックリンクである/ libにあります。望むより:
»file /lib/libc.so.6
/lib/libc.so.6: symbolic link to `libc-2.15.so'
»file /lib/libc-2.15.so
/lib/libc-2.15.so: ELF 32-bit LSB shared object [...]
32ビット標準Cライブラリ。あなたができることは、32ビットSDKツールを見つけて、それがどのように機能するかを確認することですldd
。まだ例がありませんが、欠落しているものがある場合は、ldd
次のように報告してください。
libc.so.6 => ??????
最初ただし、lddを機能させるには、32ビットglibcに付属の32ビットローダが必要です。 (これがなければ、lddはこれを実行できないファイルと呼び、何も伝えません。)
»yum search glibc
glibc.i686 : The GNU libc libraries
glibc.x86_64 : The GNU libc libraries
切り捨てられたがx86_64パッケージはすでに持っているパッケージです。 i686は32ビット版です。だから、ただインストールしてください。
何もコンパイルされないので、「devel」パッケージは必要ありません。それ以外の場合は、経験に基づいて推測およびyum whatprovides
/yum search
または役に立ちます(adbのリストを確認してください。32ビットバージョンのC ++ lib、ncurses、pthreads、および私が知らないいくつかの項目があります)。
使用法に関するクイックヒントwhatprovides
:
»yum whatprovides libtinfo
No matches found.
»yum whatprovides libtinfo.so.5
[2 matches]
»yum whatprovides "*/libtinfo.so.5"
[4 matches]
;)
答え2
32ビットglibcをインストールする必要があります。
# yum install glibc.i686
これにより、32ビットバイナリを実行しようとすると、「ファイルやディレクトリがありません」という誤解を招くメッセージが削除されます。これにより、64ビットFedoraシステムは32ビットバイナリを実行できます。
また、ldd
32 ビットの動的実行可能ファイルを呼び出すときに表示される誤解を招く「動的実行可能ファイルではない」というメッセージも削除されます。ldd
これで、欠落している32ビットライブラリをインストールする必要があります。以下のバイナリは次のadt-bundle-linux/sdk/platform-tools
リンクにリンクされています。
# yum install zlib.i686 libstdc++.i686 ncurses-libs.i686 libgcc.i686
それはすべてです。
背景
上記のパッケージ名がどのように派生するかについての背景知識です。たとえば、出力を表示します。
$ ldd adb
linux-gate.so.1 => (0xf774f000)
librt.so.1 => /lib/librt.so.1 (0xf7725000)
libncurses.so.5 => not found
libpthread.so.0 => /lib/libpthread.so.0 (0xf770b000)
libstdc++.so.6 => not found
libm.so.6 => /lib/libm.so.6 (0xf76df000)
[..]
adbにまだ2つのライブラリがありません。
各「見つかりません」ごとにパッケージ名を見つける必要があります。例:
$ yum whatprovides '*libstdc++.so.6'
[..]
libstdc++-4.7.2-2.fc17.i686 : GNU Standard C++ Library
[..]
これで、パッケージのデフォルト名に「.i686」を追加して32ビットバージョンを取得します。
答え3
次のコマンドを使用して必要なパッケージをインストールできます。
sudo yum install redhat-lsb.i686