web-dev-qa-db-ja.com

AC3D-そのようなファイルまたはディレクトリはありません

AC3Dをダウンロードし、ホームフォルダー内のフォルダーにZipを抽出しました。ターミナルを開いて、フォルダにCDを挿入し、./ac3dと入力しました。しかし、毎回次のエラーメッセージが表示されます。

bash: ./ac3d: No such file or directory

しかし、ファイルは明らかにそこにあります!私はすでにそれを実行可能にしたので、それも事実ではありませんでした。助けていただければ幸いです!

前もって感謝します!

編集1: @TheSchwa私がやった。そして表示されるので、はい、認識されます。

@Nephenteどうぞ。 ls -l ac3dの出力は次のとおりです。

-rwxrwxrwx 1 ruben ruben 3758400 mei  1 23:34 ac3d

head -1 ac3dの出力は(略称)

ELF@�   4�T94(44�4�44�4���o27o27@7����|_h�7h0h088HH�H�  P�td\�4\(\(PPQ�td/lib/ld-linux.so.2GNU �[...]

編集2

dpkg --print-architectureの出力:AMD64

dpkg --print-foreign-architecturesの出力:i386

3
TheBoneJarmer

問題は、バイナリが32ビットの実行可能ファイルであり、64ビットのUbuntuを実行していることです。 Ubuntuは複数のアーキテクチャをサポートしているため、これは問題ではありません。

実行可能ファイル、または一般的なファイルの性質について疑問がある場合は、コマンド

file <filename>

貴重な情報を提供します。コマンドが使用できない場合は、次の方法でインストールできます。

Sudo apt-get install file

この場合、他の情報の中で教えてくれます

ac3d: ELF 32-bit LSB executable[...]
interpreter /lib/ld-linux.so.2

インタプリタは、バイナリの実行に必要なすべての共有ライブラリをロードするソフトウェアです。見つからない場合、アプリケーションを実行できません。

32ビットおよび64ビットの実行可能ファイルには、異なるインタープリターと異なるバージョンの共有ライブラリが必要です。幸いなことにUbuntu(またはより正確にはDebian)は、かなり前に非常に高度なマルチアーキテクチャサポートを導入しました[引用。必要な]

パッケージシステムが別のアーキテクチャ用に準備されていることを確認するには、システムのデフォルトアーキテクチャを表示します。

dpkg --print-architecture

64ビットUbuntuでは、これはデフォルトでAMD64になります。

dpkg --print-foreign-architectures

パッケージシステムが認識している他のすべてのアーキテクチャを出力します。 32ビットをサポートするには、出力にi386が含まれている必要があります。そうでない場合は、サポートを追加できます

Sudo dpkg --add-architecture i386

その後、パッケージリストを更新する必要があります

Sudo apt-get update

I386フレーバーの必要なライブラリまたはパッケージは、次のようにインストールできます。

Sudo apt-get install <package>:i386

より具体的には、必要なインタープリターをインストールするには、GNU C Shared Libraryのインストールが示されます。

Sudo apt-get install libc6:i386

これにより、多くの場合、問題のバイナリが実行されますが、もちろん、アプリケーションが動的にリンクできるライブラリはたくさんありますが、それは依存しています。これらは同じ方法でインストールする必要があります。ライブラリが欠落している場合、リンカーは実行時にエラーを出します

./ac3d: error while loading shared libraries: libGLU.so.1: \
cannot open shared object file: No such file or directory

この時点で、不足しているファイルが含まれているパッケージを見つける必要があります。ネイティブアーキテクチャの対応するパッケージが既にインストールされている場合、vi a dpkgを検索できます。

dpkg -S libGLU.so.1
libglu1-mesa:AMD64: /usr/lib/x86_64-linux-gnu/libGLU.so.1

したがって、libglu1-mesa:i386をインストールする必要があります。すべての依存関係が満たされるまで繰り返します。

しかし、多くの場合、ライブラリはシステムから完全に欠落しています。その場合、 buntuのオンラインパッケージ データベースを検索するか、ユーティリティapt-fileをインストールして

apt-file search <filename> 

Debianでの複数のアーチのサポートに関する非常に素晴らしいHOWTO(Ubuntuでも同じです)は here にあります。

Extra:パッケージbinutilsには、バイナリを調べるための非常に気の利いたツールが含まれています。特に、ldd(動的依存関係のリスト)ユーティリティが含まれています。バイナリの実行に必要なすべての動的ライブラリをリストします。

例:

ldd ac3d

生産する

linux-gate.so.1 (0xf77b7000)
libfreetype.so.6 => /usr/lib/i386-linux-gnu/libfreetype.so.6 (0xf76ee000)
libGLU.so.1 => not found
libGL.so.1 => not found
libpng12.so.0 => /lib/i386-linux-gnu/libpng12.so.0 (0xf76c0000)
libXmu.so.6 => not found
libXext.so.6 => not found
libX11.so.6 => not found
libdl.so.2 => /lib/i386-linux-gnu/i686/cmov/libdl.so.2 (0xf76ba000)
libpthread.so.0 => /lib/i386-linux-gnu/i686/cmov/libpthread.so.0 (0xf769e000)
libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xf75ac000)
libm.so.6 => /lib/i386-linux-gnu/i686/cmov/libm.so.6 (0xf7566000)
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf7549000)
libc.so.6 => /lib/i386-linux-gnu/i686/cmov/libc.so.6 (0xf739e000)
libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xf7381000)
/lib/ld-linux.so.2 (0xf77ba000)

このようにして、システムからどのライブラリが欠落しているかをすばやく見つけることができます。

3
Nephente