web-dev-qa-db-ja.com

gccがスポーンで失敗する:そのようなファイルまたはディレクトリはありません

Ruben’s ビルド Cygwin GCC をダウンロードしました。

ただし、実行するとファイルをコンパイルできないようです

 $ touch foo.c 
 
 $ gcc foo.c 
 gcc:エラー:スポーン:そのようなファイルまたはディレクトリはありません

回避策として、これが機能することがわかりました

i686-w64-mingw32-gcc foo.c
13
Steven Penny

Cygwin64でも同じ問題が発生し、解決策はPATH関連でした。

結局のところ、/ usr/binと/ binにgccのコピーがあります(少なくとも、私のインストールにはあります)。

/ bin/gccの実行が上記のエラーで失敗しました-相対パスが誤って想定されているためだと思いますか?

/ usr/bin/gccの実行は期待どおりに機能します!

私の場合、「問題」は、誤って「/ bin」をPATH環境変数に挿入したため、/ usr/bin/gccではなく/ bin/gccが実行されたことです。パスから「/ bin」を削除すると、問題が解決しました。

異なる場所に2つのgccバイナリ(同一のように見える)がある理由はまだ不明です...しかし、Cygwinの達人がそれに答えることができるかもしれません。または多分私のインストールはただfoo-barredです。

6
bloatedfish

同じ問題が発生し、gcc-coreに加えてg ++パッケージをインストールすることで解決しました

14
Felix Burkhardt

Rubenのビルドはnot Cygwin GCCパッケージであり、さまざまなプラットフォームで実行されるクロスコンパイラですが、MinGW-w64ツールチェーンを使用してネイティブWindowsをターゲットにしています。

いずれにせよ、Cygwinでそれらを使用するべきではありません。 Cygwin実行可能ファイルをコンパイルする場合は、gcc4パッケージをインストールします。 Windows用にクロスコンパイルする場合は、代わりにmingw64-i686-gcc(Win32の場合)またはmingw64-x86_64-gcc(Win64の場合)パッケージをインストールしてください。

3
Yaakov

ソースファイルの拡張子が小文字であることを確認してください(つまり、main.c、not main.C):

$ gcc -o main main.C
$ gcc: error: spawn: No such file or directory

$ gcc -o main main.c
$ # all good

これは、gccに指定された拡張子の場合のみを指します。実際のソースファイルには、必要に応じて拡張子を付けることができます。

説明:これは、cygwinとgccを試した結果ですが、この動作の実際の理由はわかりません。

2
mihai

Gccは実際にはコンパイラではありません。これは、必要なコンパイラ、アセンブラ、およびリンカコンポーネントの実行を調整するフロントエンドプログラムです。通常、これらの他のものは別々にコンパイルされたプログラムです。

したがって、gccはコンパイラを検索できないことを(一種の)伝えようとしています。私はそれがあなたのPATHまたは予想される場所にある必要があると思います。

これをWindowsDOSボックスから実行している場合は、必ずWindowsPATH設定が必要です。

Cygwinのインストール が好きです。必ずrxvtを含めてください。その時点で、純粋にsh(1)パスを構成でき、環境はかなり文明化されています。

2
DigitalRoss

このエラーは、cygwinccが必要なファイルを見つけることができない場合に発生します。

Cygwinのビン内で直接実行しているものfrom Windowsシェルの場合、注意すべき点は、Windowsでは次のようにコマンドラインからプログラムを実行できることです。

e:cyg/bin/gcc -flags

e:cygの間にスラッシュがないことに注意してください。

したがって、このコマンドはWindowsシェルから正常にstart cygwin gccになりますが、実行の途中で、gccの一部のコンポーネントがエラーになるため、エラーが発生します。入力e:cyg/bin/gccの最初の引数を利用し、mingwとは異なり、これは有効なパスではありません cygwingccの場合。

これは、コマンドを次のように変更するだけで修正できます。

e:/cyg/bin/gcc -flags

e:cygの間のスラッシュに注意してください。


同様の落とし穴は、Windowsがe:/../folder1の代わりにe:/folder1のようなパスを許可しているためです。ルートフォルダにいて、..を使用して別のフォルダに移動しようとしても、Windowsはエラーを表示しません。

したがって、次のコマンドを使用して実行を開始 cygwingccを実行できます。

e:/../cyg/bin/gcc -flags

..あるいは:

e:/../../../../../../../../../cyg/bin/gcc -flags

ただし、cygwin gccの一部のコンポーネントがコマンド入力自体の最初の引数を使用してgccを実行しようとするため、gcc: error: spawn: No such file or directoryで途中で失敗します。 mingw、e:/../cyg/bin/gccは、上に移動するフォルダーがないときにフォルダーをup移動するため、cygwinによって有効なパスとして認識されません。

上記のように、これはパスを有効に保つことで修正できます。

e:/cyg/bin/gcc -flags
1
Pacerier

Cygwinインストールディレクトリからいくつかの実行可能ファイルを抽出して別の場所にコピーしようとしたときに、同じエラーが発生しました。

straceは、spawnによって検出されなかったファイルを表示します。

/lib/gcc/x86_64-pc-cygwin/6.4.0/cc1.exe

Cc1.exeを次の場所にコピーしたとき

<dir with sh.exe and cpp.exe>/../lib/gcc/x86_64-pc-cygwin/6.4.0/cc1.exe

それはうまくいきます。

1
Clemens1509