Ruben’s ビルド Cygwin GCC をダウンロードしました。
ただし、実行するとファイルをコンパイルできないようです
$ touch foo.c $ gcc foo.c gcc:エラー:スポーン:そのようなファイルまたはディレクトリはありません
回避策として、これが機能することがわかりました
i686-w64-mingw32-gcc foo.c
Cygwin64でも同じ問題が発生し、解決策はPATH関連でした。
結局のところ、/ usr/binと/ binにgccのコピーがあります(少なくとも、私のインストールにはあります)。
/ bin/gccの実行が上記のエラーで失敗しました-相対パスが誤って想定されているためだと思いますか?
/ usr/bin/gccの実行は期待どおりに機能します!
私の場合、「問題」は、誤って「/ bin」をPATH環境変数に挿入したため、/ usr/bin/gccではなく/ bin/gccが実行されたことです。パスから「/ bin」を削除すると、問題が解決しました。
異なる場所に2つのgccバイナリ(同一のように見える)がある理由はまだ不明です...しかし、Cygwinの達人がそれに答えることができるかもしれません。または多分私のインストールはただfoo-barredです。
同じ問題が発生し、gcc-coreに加えてg ++パッケージをインストールすることで解決しました
Rubenのビルドはnot Cygwin GCCパッケージであり、さまざまなプラットフォームで実行されるクロスコンパイラですが、MinGW-w64ツールチェーンを使用してネイティブWindowsをターゲットにしています。
いずれにせよ、Cygwinでそれらを使用するべきではありません。 Cygwin実行可能ファイルをコンパイルする場合は、gcc4パッケージをインストールします。 Windows用にクロスコンパイルする場合は、代わりにmingw64-i686-gcc(Win32の場合)またはmingw64-x86_64-gcc(Win64の場合)パッケージをインストールしてください。
ソースファイルの拡張子が小文字であることを確認してください(つまり、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を試した結果ですが、この動作の実際の理由はわかりません。
Gccは実際にはコンパイラではありません。これは、必要なコンパイラ、アセンブラ、およびリンカコンポーネントの実行を調整するフロントエンドプログラムです。通常、これらの他のものは別々にコンパイルされたプログラムです。
したがって、gccはコンパイラを検索できないことを(一種の)伝えようとしています。私はそれがあなたのPATHまたは予想される場所にある必要があると思います。
これをWindowsDOSボックスから実行している場合は、必ずWindowsPATH設定が必要です。
Cygwinのインストール が好きです。必ずrxvtを含めてください。その時点で、純粋にsh(1)パスを構成でき、環境はかなり文明化されています。
このエラーは、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
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
それはうまくいきます。