Расширение файла по умолчанию для исполняемого файла, созданного g ++ под Cygwin vs Linux

Я сделал большую часть своей работы над VisualStudio и не имею большого опыта работы с gcc или g ++. Когда я пытался скомпилировать (например, aprogram.cpp) этим утром на моем компьютере с помощью cygwin, я получил (aprogram.exe), когда пытался скомпилировать то же самое на моем Ubuntu-боксе, который я получил (aprogram) без какого-либо расширения. , Мне просто интересно, если кто-то будет достаточно любезен, чтобы сказать мне, почему. Этот вопрос просто из любопытства. :)

Заранее спасибо!

РЕДАКТИРОВАТЬ: (из комментария Джимми) g ++ под Cygwin по умолчанию .exe

11.12.2008 15:26:49
Простой ответ по поводу g ++.
Svante 11.12.2008 15:35:10
Серьезно, сделайте заголовок описательным, например, «почему в имени файла вывода g ++ нет расширения?»
Svante 11.12.2008 15:37:10
Спасибо. Но это снова исправлено - надеюсь, вы не возражаете :)
41104 5.01.2009 18:48:00
8 ОТВЕТОВ

.exe - это вещь для Windows. Unix не заботится о расширениях. Исполняемость основана на метаданных файла, а также на содержимом файла. g ++ via cygwin на самом деле не является приложением для Windows, поэтому оно несет свои корни в Unix.

6
5.01.2009 00:14:46
IIRC cygwin g ++ на самом деле по умолчанию использует расширения .exe, включая «a.exe» по умолчанию, если не задано -o
Jimmy 11.12.2008 15:56:25

Это просто соглашение об именах. В Unix / Linux исполняемые файлы не имеют расширения, только исполняемый бит.

12
11.12.2008 15:29:31

Это просто: в UNIX вам не нужны никакие расширения steenkin . Фактически, «расширение», подобное .c, является просто удобным соглашением об именах; в отличие от Windows, файловая система видит имя файла как одну строку, .c и все.

Для действительно хорошего времени, скомпилируйте программу на C без -oвсякого флага. Ваш исполняемый файл все равно будет отображаться --- по имени по умолчанию имя для исполняемых файлов: a.out.

18
5.01.2009 19:19:27
он также использует информацию после «.» положить печать красивые цвета в вашей оболочке.
helloandre 11.12.2008 15:35:07
MS-DOS фактически хранит имена файлов как 8-символьное имя и 3-символьное расширение. Windows 95 и выше обрабатывали имя файла как одну длинную строку. К сожалению, старые привычки трудно сломать. Вы все еще можете увидеть людей, использующих . означать все файлы, когда правильный подстановочный знак *
Ferruccio 11.12.2008 16:47:06
Почти - даже на NTFS, финальный "." имя файла игнорируется / удаляется (так же, как игнорируется регистр), без видимой причины.
Steve Jessop 11.12.2008 22:38:55
Нет, последний период не удаляется в NTFS. Он удаляется оболочкой Windows (explorer.exe) без уважительной причины - NTFS как таковая (т.е. драйвер Microsoft NTFS и все альтернативы, включая ntfs-3g) ничего не удаляет. Пожалуйста, будьте яснее.
Mihai Limbășan 5.01.2009 06:21:16
На самом деле, довольно забавно связываться с NTFS. Например, вы можете установить Linux LiveCD, например, записывать файлы, которые будут называться NUL, и это будет запрещено для Windows :) Кроме того, вы можете смешивать прописные и строчные буквы в NTFS.
Camilo Martin 13.08.2012 19:52:59

Если вам интересно, как запустить программу в UNIX, просто перейдите в папку с программой, которую вы хотите выполнить (aprogram), и введите

./aprogram

Это скажет оболочке, что вы хотите выполнить aprogram в текущем каталоге.

4
11.12.2008 15:33:13

Если вы хотите, чтобы выходные данные имели расширение .exe, просто используйте для этого флаг -o (например, -o aprogram.exe). В любом случае под Linux это будет работать нормально.

Возможность выполнения программы в Linux зависит от прав доступа к файлу (см. Chmod ). Разрешения на выполнение будут автоматически установлены gcc / g ++.

2
11.12.2008 15:40:32

Исполняемые файлы не имеют расширения в мире Unix, потому что они предназначены для выполнения в оболочке. Представьте себе следующее:

cat.bin file.txt | less.bin

Это безобразно! Unix использует так называемые магические байты в начале каждого файла для определения типа файла. Для двоичного формата по умолчанию, называемого ELF, 7f 45 4c 46в начале есть 4-байтовое слово . Это возможно не для всех форматов файлов. Рассмотрим код C или код Java. Они оба могут начинаться с комментариев и могут выглядеть одинаково. Таким образом, вы все равно должны использовать расширения имени файла, и это хорошо, когда используется там, где это уместно.

3
5.01.2009 06:10:54
Ну, вам также не нужно вводить .exe в Windows ... Хороший момент в заголовке ELF.
Macke 18.05.2011 12:59:15

Есть много программ, и все они без расширения :)

ls -l / bin вы увидите, что у всех них есть флаг + x, чтобы пометить их как исполняемый файл.

1
5.01.2009 01:18:05

Честно, просто назови их .elf. И если вы не уверены, что это за тип файла, выполните:

$ file MyFile

Это скажет вам, каково содержимое файла, и вы можете выбрать имя таким способом, но это не обязательно - просто косметическое средство, если вы использовали расширения все время.

1
13.08.2012 19:56:00