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
問題は、バイナリが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)
このようにして、システムからどのライブラリが欠落しているかをすばやく見つけることができます。