9

私はほとんどの作業を VisualStudio で行ってきましたが、gcc や g++ の経験はあまりありません。今朝、cygwin を使用して PC で (aprogram.cpp など) をコンパイルしようとしたとき、Ubuntu ボックスで同じものをコンパイルしようとしたときに (aprogram.exe) を取得しました。拡張子なしで (aprogram) を取得しました。 . 誰か親切に理由を教えてくれませんか。この質問は単なる好奇心からです。:)

前もって感謝します!

編集: (ジミーのコメントから) Cygwin の g++ のデフォルトは .exe です

4

8 に答える 8

18

それは簡単です。UNIX ではno steenkin' extensions は必要ありません。実際、.c のような「拡張子」は単なる便利な命名規則です。Windows とは異なり、ファイル システムはファイル名を 1 つの文字列 .c とすべてとして認識します。

フラグをまったく付けに C プログラムをコンパイルしてみてください。-o実行可能ファイルは引き続き表示されます --- 実行可能ファイルのデフォルト名: a.out.

于 2008-12-11T15:30:10.933 に答える
13

それは単なる命名規則です。Unix/Linux では、実行可能ファイルには拡張子がなく、実行可能なビットだけがあります。

于 2008-12-11T15:29:31.433 に答える
7

.exe は Windows のものです。Unix は拡張機能を気にしません。実行可能性は、ファイルのメタデータとファイルの内容に基づいています。cygwin を介した g++ は、実際には Windows アプリではないため、UNIX のルーツを持っています。

于 2008-12-11T15:28:44.307 に答える
4

UNIX でプログラムを実行する方法を知りたい場合は、実行したいプログラム (aprogram) のあるフォルダーに移動し、次のように入力します。

./aprogram

これにより、現在のディレクトリで「aprogram」を実行することをシェルに伝えます。

于 2008-12-11T15:33:13.237 に答える
4

実行可能ファイルは、シェルで実行されることを意図しているため、UNIX の世界では拡張機能がありません。次のことを想像してください。

cat.bin file.txt | less.bin

それは醜いです!Unix は、各ファイルの先頭にあるいわゆるマジック バイトを使用して、ファイル タイプを検出します。ELF と呼ばれるデフォルトのバイナリ形式では、先頭に 4 バイトのワードがあり7f 45 4c 46ます。これは、すべてのファイル形式で可能というわけではありません。C コードまたは Java コードを検討してください。どちらもコメントで始めることができ、まったく同じように見せることができます。そのため、ファイル名拡張子を使用する必要はありますが、適切な場所で使用すると良いことです。

于 2009-01-05T00:31:44.837 に答える
2

出力に .exe 拡張子を付けたい場合は、-o フラグを使用してください (例: -o aprogram.exe)。どちらの方法でもLinuxの下で問題なく動作します。

Linux でプログラムを実行できるかどうかは、ファイルのパーミッションに基づいています ( chmodを参照)。実行権限は gcc/g++ によって自動的に設定されます。

于 2008-12-11T15:40:32.190 に答える
1

ls /bin 多くのプログラムがあり、それらはすべて拡張子なしです:)

ls -l /bin を実行すると、それらすべてに実行可能ファイルとしてマークするための +x フラグが設定されていることがわかります。

于 2009-01-05T01:18:05.930 に答える
1

正直なところ、名前を付けてください.elf。ファイルの種類がわからない場合は、次を実行します。

$ file MyFile

これにより、ファイルの内容がわかります。この方法で名前を選択することもできますが、これは必須ではありません。これまで拡張機能に慣れていた場合は、見た目だけです。

于 2012-08-13T19:56:00.640 に答える