そのようなファイル、又はディレクトリはありません?しかし、ファイルは存在します!


186

ゲーム(Shank)をダウンロードしましたが、binファイルが実行されません。実行可能ファイルを起動しようとすると表示されるエラーは次のとおりです。

bash: ./shank-linux-120720110-1-bin: No such file or directory

2
「chmod u + x ./shank*bin」が最初でしょうか?
agent86

また、それは多分それは単にタイプミスだ、むしろ『-bin』より」.binファイルすべきではない
Anake

お返事ありがとうございます。Agent86のコマンドを実行しましたが、同じ結果になります。.debファイルもダウンロードしましたが、問題もあります。このゲームにどんな問題があるのか​​わかりません。
フランチェスコ

64ビットのインストールを実行しているかどうかを確認してください(この問題の最も一般的なケースです)。
ジル

はい、ラップトップで64ビットアーキテクチャを使用していることを確認します。
フランチェスコ

回答:


236

おそらく、32ビットサポートがインストールされていない64ビットシステムで32ビットバイナリを実行しようとしています。

「No such file or directory」というメッセージが表示される場合が3つあります。

  • ファイルが存在しません。ファイルが存在することを確認したと思います(おそらく、シェルがそれを完了したためです)。
  • その名前のファイルがありますが、それはぶら下がるシンボリックリンクです。
  • ファイルは存在し、読み取ることさえできます(たとえば、コマンドfile shank-linux-120720110-1-binは「ELF 32-bit LSB executable…」のように表示されます)、それでも実行しようとすると、ファイルが存在しないことが通知されます。

この最後のケースのエラーメッセージは明らかに紛らわしいです。あなたが言っていることは、プログラムを実行するために必要なランタイム環境の重要なコンポーネントが欠落しているということです。残念ながら、エラーが報告されるチャネルには、エラーコードのスペースのみがあり、実際に原因となるのはランタイム環境であるというこの追加情報のためのスペースはありません。この説明のテクニカルバージョンが必要な場合は、64ビットシステムで32ビットバイナリを実行するときに「見つかりません」というメッセージを取得するをご覧ください

このfileコマンドにより、このバイナリが何であるかがわかります。いくつかの例外を除き、Ubuntuのリリースが対象としているプロセッサアーキテクチャのバイナリのみを実行できます。主な例外は、64ビット(amd64、別名x86_64)システムで32ビット(x86、別名IA32)バイナリを実行できることです。

11.04までのUbuntuでは、64ビットインストールで32ビットバイナリを実行するには、ia32-libsパッケージインストールする必要がありますia32-libsをインストールする。追加のライブラリをインストールする必要がある場合があります(インストールすると、明示的なエラーメッセージが表示されます)。

11.10(oneiric)でマルチアーチサポートが導入されたため、引き続きインストールia32-libsできますが、よりきめの細かいアプローチを選択できます。取得するだけで十分です(その他の必要なライブラリ)。libc6-i386 libc6-i386をインストールします


素晴らしい答えをありがとう、ジル。この問題はまだ発生していませんが(まだ!)、今後の参考のために回答を提出しました。
ジムC

徹底的な回答ありがとうございます!ダウンロードしたファイルbinは、この形式(bin)で使用できる唯一のものです。だから私はすべてのアーキテクチャに適していると思います。アーキテクチャ(64ビット)用の.debファイルもダウンロードしましたが、エラーが異なります。この時点で、ゲームがいくつかのバグの影響を受けているか、このゲームをインストールできないと思います。今、libc6-i386をダウンロードしようとしていますが、それでもインストールしようとしています。大きな変更がある場合は、再度書き込みます。お時間をいただきありがとうございます。
フランチェスコ

2
@Francescoソリューションを投稿してください!UbuntuでShankを実行しようとしている他の人を助ける可能性があります。自分の質問に答えても大丈夫です。
ジル

1
lddライブラリが欠落しているかどうかを確認するために使用できます。他の人の間でldd kgio_ext.so何かを言うかもしれませんlibruby.so.2.3 => not found
-EnabrenTane

1
明らかになる別のシナリオがありbash: ...some...path...: No such file or directoryます:実行可能ファイルを移動した後。Bashは、$ PATHにある実行可能ファイルへのパスをキャッシュしているようです。hash -rクリアして実行します。参照:unix.stackexchange.com/a/5610/11352
akavel

53

64ビットUbuntu Multiarchシステム

この回答は、次の出力がfile file-name表示される場合にのみ実行してください。

file-name: ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, not stripped

64ビットのマルチi386アーキテクチャUbuntuシステムで32ビットの実行可能ファイルを実行するには、アーキテクチャを追加する必要がlibc6:i386ありlibncurses5:i386libstdc++6:i386これらの3つのライブラリパッケージをインストールする必要があります。

sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
./file-name

私は最後のコマンドにsudoを使用します。sudoには危険があるため、32ビットバイナリ(明らかに、ユーザーまたはUbuntuによってコンパイルされていない)を起動します。(まあ、もちろん、非ルートとしても)
alci

最後に何が起こるかもしれないが、それは動作します。
アビナッシュラジ

1
CentOSまたはRedHatを使用している場合、この回答は適用されないことに注意してください。このため数時間放り出されました。
オミクス

1
Kali 2 64ビットでは、インストールするだけでしたlibselinux1:i386
-Aralox

4

32ビットのdebをインストールすることで、(ia32-libsとlibc6に加えて)いくつかのライブラリが不足していることに気付きました。私は最初にこのコマンドを与えることでこの問題を解決しました:

sudo apt-get install -f          

その後、別のエラーが発生しました:

Message: SDL_GL_LoadLibrary 
Error: Failed loading libGL.so.1

明らかに、これらのライブラリは適切にインストールされました。詳細に入ることなく、手作業でライブラリをリンクする必要がありました。それから、Synapticが次のパッケージをインストールすることで、より簡単なソリューションになることにも気付きました。

libgl1-mesa-glx:i386
libgl1-mesa-dri: i386.

その後、次の問題は再生中の黒い画面でした。これは、/ Shank / binの実行可能ファイルをhttp://treefort.icculus.org/smb/smb-linux-mesa-hotfix-test.tarに置き換えることで解決しました。 .bz2

それが誰かに役立つことを願っています。さらにヘルプや詳細が必要な場合は、お気軽にお問い合わせください。


3

以下に、問題の性質とUbuntu 16.04での修正方法についてもう少し詳しく示したトランスクリプトを示します。file「動的にリンクされている」とldd報告されていても、「動的実行可能ファイルではない」と報告されていることに注意してください。

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

$ file myprogram
myprogram: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.2.5, not stripped

$ ldd myprogram
    not a dynamic executable

libc6:i386をインストールすると、改善が始まります...

$ sudo apt-get install libc6:i386 # the initial fix
...

$ ldd myprogram
    linux-gate.so.1 =>  (0xf77fd000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf7626000)
    /lib/ld-linux.so.2 (0x56578000)

$ ./myprogram
myprogram: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory

ジョブを完了するには、追加のライブラリを1つずつ特定してインストールする必要がある場合があります...

$ sudo apt-get install libstdc++6:i386 ## may require various additional libs

$ ./myprogram
... works correctly ...

インストールする正しいライブラリを特定する体系的な方法があるかどうかはわかりません。エラーメッセージをパッケージ名にマッピングする推測作業が少しあります(タブ補完が役立ちます)。


ldd(誤って)「動的実行可能ファイルではない」と報告します。
-nobar

3

@Gillesの回答を拡張するには、少なくとも3つのシナリオがあり、このエラーが発生します。

  1. ファイルが存在しません。
  2. ファイルは存在しますが、宙ぶらりんのシンボリックリンクです。
  3. ファイルが存在し(fileコマンドが機能するなど)、不可解なエラーメッセージが作成されます。これは、ローダーに問題があることを意味する場合があります。

ローダーの問題のカテゴリー:

  1. 実行可能ファイルのローダーが存在しません。fileコマンドを使用してこれを確認し、ローダーが存在するかどうかを確認できます。例えば

    file lmgrd
    lmgrd: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-lsb-x86-64.so.3, for GNU/Linux 2.6.18, stripped
    

    通知interpreter /lib64/ld-lsb-x86-64.so.3; このファイルが存在しない場合は、インストールする必要があります。16.04のこの特定のローダーの場合、答えはsudo apt-get install lsbでした。

  2. スクリプトのローダーに関する問題(この回答を参照)。

  3. 共有ライブラリがありません- ldd <file-name>「見つかりません」ライブラリをチェックするために使用します。詳細については、この回答を参照してください。

存在しないローダーは、32/64ビットの不一致またはその他の理由が原因である可能性があります。私が知らない他の種類のローダーエラーがあるかもしれません。


1
私の場合、file lmutilインタープリターは表示しませんでしたlddが、インストールするとlsb問題は解決しました。
-davidA
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.