64ビットFedora 17で32ビットプログラムを実行するにはどうすればよいですか?

64ビットFedora 17で32ビットプログラムを実行するにはどうすればよいですか?

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にあります。したがって、lddSDK/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]

;)

おすすめ記事